我想使用Sphinx进行多对多匹配。我在StackOverflow中将问题和标签用于说明。
一个问题可以与许多标签相关联,反之亦然。
所以在mysql中,我有3个表:question,tag,question_tag。
我想在“java”,“sphinx”,“mysql”,“hibernate”集合中搜索包含尽可能多的标签的问题。因此,结果可能会出现3场比赛,2场比赛或1场比赛的问题。
目前,我创建了一个字段,用空格连接所有这些标签,并在该字段中进行sphinx搜索。但这听起来很愚蠢,在添加和删除标签时会产生大量开销。会有更聪明的方式,对吗?
答案 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