3

理想情况下,我想降低某些词的重要性,例如“商店”、“商店”、“餐厅”。

当用户搜索“牛排餐厅”时,我希望“Jimmy's Steak Restaurant”与“Ralph's Steak House”一样重要。我希望通过严重降低“餐厅”一词的重要性(以及其他 20-50 个词)来实现这一点。

停用词适用于某些词,例如“a”、“the”、“of”等,但它们是全有或全无。

有没有办法在索引或映射级别为每个单词提供加权或提升值?

我可能可以在查询级别完成此操作,但如果我需要减少 50 个单词的影响,那可能会非常糟糕。

这是一个普遍的例子。在我实际的复杂解决方案中,我确实需要减少相当多的搜索词的影响。

4

1 回答 1

4

我不相信在索引期间指定术语级别的提升是可能的。 在这个线程中,Shay 提到这在 Lucene 中是可能的,但是通过 API 显示它是一个棘手的特性。

另一个相关线程,暗示同样的事情。Shay 建议尝试使用 custom_score 查询对其进行排序:

我认为您应该首先尝试在搜索端解决它。如果您在搜索时知道权重,则可以构建一个根据标签应用不同提升的查询,或者使用 custom_score 查询。

Custom_score 查询比其他查询慢,但我建议您运行并检查它是否适合您(使用实际数据和相关索引大小)。好消息是,如果它对你来说很慢(这里的慢意味着负载下的延迟和 QPS),你总是可以添加更多的副本和更多的机器来分离负载。

下面是一个 custom_score 查询示例,它在一个有点相似的术语级别上提升(除了它是针对只有一个类别术语的特殊字段,所以这可能不适用)。将脚本分解为本机脚本可能更容易,而不是使用 mvel,因为您将拥有大量单词。

作为替代方案,也许添加一个同义词标记过滤器来交换“商店”、“餐厅”、“商店”等词?

于 2013-01-23T16:54:42.817 回答