我们遇到了将非相关结果作为搜索结果最高返回的问题,我们正在尝试改善这种行为,但不确定如何。
我们有大约十几个字段的 SearchIndex。document=True 字段是一个模板支持的字段,我们已将大部分内容放入其中。在那里找到的一些东西比其他东西的相关性要低得多,即使它仍然有用。
举一个具体的例子:如果用户搜索“红玫瑰”,我们希望返回红玫瑰作为最热门的结果......如果较低的结果只是玫瑰或只是红色,甚至被描述为“玫瑰红”,那就更好了“ 彩色。
问题是我们的 document=True 字段有大量被描述为“玫瑰红”的项目。更糟糕的是,实际的红玫瑰没有“红色”和“玫瑰”特别接近,因为这些值将来自不同的领域。结果,我们得到了完全不相关的前几百个结果。
我们想做的是:
A. 搜索主文档,然后搜索我们的每个其他字段并相应地提升(但不是硬过滤)。如果“玫瑰”一词出现在其中一个项目名称中,并且“红色”作为其属性值之一出现,则该结果应该具有更高的分数。这为我们提供了按相关性排序的理论上的最佳结果。
B. 一次搜索所有字段,如果值为任何“提升”字段,则提升。
似乎使用字段提升应该是答案,但我们无法弄清楚如何表达它,因为基于字段的过滤是一种苛刻的排除,我们希望它只影响相关性评分。
这两者的结果实际上是相同的。我们只是无法弄清楚如何使用 Haystack 来完成其中的任何一个。或者,如果我们不得不退回到原始查询,如何编写完成此任务的 solr 查询。