使用Sphinx进行多对多搜索

时间:2010-11-01 02:46:07

标签: sphinx

我想使用Sphinx进行多对多匹配。我在StackOverflow中将问题和标签用于说明。

一个问题可以与许多标签相关联,反之亦然。

所以在mysql中,我有3个表:question,tag,question_tag。

我想在“java”,“sphinx”,“mysql”,“hibernate”集合中搜索包含尽可能多的标签的问题。因此,结果可能会出现3场比赛,2场比赛或1场比赛的问题。

目前,我创建了一个字段,用空格连接所有这些标签,并在该字段中进行sphinx搜索。但这听起来很愚蠢,在添加和删除标签时会产生大量开销。会有更聪明的方式,对吗?

2 个答案:

答案 0 :(得分:4)

在文档MVA和文档中查看MVA - 多值属性 sql_attr_multi

我过去曾用这个来搜索“人”的“兴趣”。所以我可能喜欢摇滚乐和看橄榄球。 Sphinx可以在数组中对此进行索引,您可以使用OR或AND匹配来搜索它们。

答案 1 :(得分:0)

最简单的方法是通过问题ID加入表和组。狮身人面像为你完成剩下的工作:

source src_questions{
  select question_id, question_subject, question_body, tag_value from question \
  JOIN question_tag on question.question_id = question_tag.question_id \
  JOIN tag on question_tag.tag_id = tag.tag_id
  GROUP BY question_id 
}

假设您在表格中有以下列

问题表:

question_id INT
question_subject VARCHAR or TEXT
question_body VARCHAR or TEXT

标记表:

tag_id INT
tag_value VARCHAR or TEXT

<强> question_tag_table:

question_id INT
tag_id INT
相关问题