Sphinx多值属性过滤器

时间:2013-07-24 07:39:21

标签: filter sphinx multivalue

是的,每个标记都有唯一的ID。我不必将这些唯一的id存储在表中。我可以用这种方式存储它们......

$tags = array("Music","Sports","Food","Books",………)

数组对我来说是最好的方式,因为它很容易改变。此外,数组键本身将作为唯一的ID。

但我的情况更为重要,所以让我详细说明具体情况。

我有一个表格,包括Id,标题,描述,标签等等。

Id  |    Title      |  Description                     |  Tags  
1   | Sport & Hygine| With sport & music good food is …| Sport, Food
2   | Rock Concert  | Great Rock Show at …             | Music, Dance

如果用户选择(过滤)显示记录,则会在“标记”字段中显示“音乐”。尽管标题和描述在第二行中根本没有单词Music,但它仍然应该获得第一优先级。此外,应该注意标题和描述是文本字段,Sphinx应该以正常方式搜索,为标题和描述提供适当的权重和等级。但标签字段不能作为文本索引进行搜索。标签字段需要过滤。

因此,在上面的示例中,如果选择了音乐,则应仅显示第2行,因为它是基于标签过滤的,而第2行仅在标签字段中包含音乐。但是音乐也出现在描述字段的第1行中,但在这里它应该被忽略。我希望我能够澄清情况。任何与此有关的人都非常感激。

1 个答案:

答案 0 :(得分:0)

unique-id需要在所有文档中都是唯一的。因此,“体育”将在所有文档上具有相同的ID,因此可以使用相同的ID进行搜索。所以你搜索ID,而不是单词。

因此标签可用于影响排名,您可以将它们放在Field中。但是ALSO也将标签-id存储在MVA中,因此可以用于setFilter。

这样的东西

Music @tags Music

应该作为扩​​展查询。因为它需要标签中的音乐一词。但是第一个学期也将匹配所有领域并帮助排名。