0

我们遇到了将非相关结果作为搜索结果最高返回的问题,我们正在尝试改善这种行为,但不确定如何。

我们有大约十几个字段的 SearchIndex。document=True 字段是一个模板支持的字段,我们已将大部分内容放入其中。在那里找到的一些东西比其他东西的相关性要低得多,即使它仍然有用。

举一个具体的例子:如果用户搜索“红玫瑰”,我们希望返回红玫瑰作为最热门的结果......如果较低的结果只是玫瑰或只是红色,甚至被描述为“玫瑰红”,那就更好了“ 彩色。

问题是我们的 document=True 字段有大量被描述为“玫瑰红”的项目。更糟糕的是,实际的红玫瑰没有“红色”和“玫瑰”特别接近,因为这些值将来自不同的领域。结果,我们得到了完全不相关的前几百个结果。

我们想做的是:

A. 搜索主文档,然后搜索我们的每个其他字段并相应地提升(但不是硬过滤)。如果“玫瑰”一词出现在其中一个项目名称中,并且“红色”作为其属性值之一出现,则该结果应该具有更高的分数。这为我们提供了按相关性排序的理论上的最佳结果。

B. 一次搜索所有字段,如果值为任何“提升”字段,则提升。

似乎使用字段提升应该是答案,但我们无法弄清楚如何表达它,因为基于字段的过滤是一种苛刻的排除,我们希望它只影响相关性评分。

这两者的结果实际上是相同的。我们只是无法弄清楚如何使用 Haystack 来完成其中的任何一个。或者,如果我们不得不退回到原始查询,如何编写完成此任务的 solr 查询。

4

1 回答 1

1

我可以给你一些指示,因为我没有得到确切的用例:-

您可以检查Solr edismax 查询解析器来配置:-

  1. 您要搜索的字段 - 主要用于选择结果
  2. 相关性字段的可变提升 - 确定字段的重要性
  3. 不同单词组合的可变提升,例如单个单词、短语匹配、带斜率的 shingle 匹配以确定相关性
  4. 在其他领域提供额外的推动

这将帮助您过滤结果并根据字段和单词组合匹配相应地对它们进行排序

于 2013-02-17T09:59:05.867 回答