繁体   English   中英

配置ElasticSearch相关性得分,以便优先选择所有单词,而不是某些单词?

[英]Configuring ElasticSearch relevance score to prefer a match on all words over a match with some words?

例如,通过搜索“堆栈溢出”,我希望同时包含“堆栈”和“溢出”的文档的得分要高于仅包含这些单词之一的文档。

现在,我看到的情况是,包含“堆栈” 0次和“溢出” 50次的文档的排名高于包含“堆栈” 1次和“溢出” 1次的文档的排名。

第二个关注点是将具有确切单词而不是单词变体的文档排名更高。 例如,包含“堆栈”的文档的排名应高于包含“堆栈”的文档的排名。

第三个问题是将具有相邻单词的文档排名更高。 例如,文档“如何使用纸堆溢出”的排名应高于文档“纸堆导致收件箱溢出”。

如果将这三个问题放在一起,则这是“堆栈溢出”的所需结果等级的示例:

示例搜索结果

是否可以配置索引或查询以这种方式计算分数?

在这里,您试图在单个查询中实现多项目标。 首先,您应该尝试了解ES如何为您返回结果。

  1. 包含50次溢出的文档的排名高于包含1次“堆栈”和1次“溢出”文档的排名,因为ES分数计算基于基于tf / idf的分数计算。 显然,在这种情况下, 溢出发生了50倍,这比另一个文档中其他2项的其他频率之和高得多。

注意:-您可以按照链接中所述禁用此计算。

如果您不关心术语在字段中出现的频率,而只关心该术语的存在,则可以在字段映射中禁用术语频率:

  1. 由于词干 ,您将获得包含术语“ stacking的结果,如果您不希望包含stacking文档不出现在搜索结果中,则不要以词干形式的文档或从ES获得结果后进行一些后处理并降低他们的分数,不确定ES是否开箱即用。

  2. 您需要的第三件事是短语搜索

还可以使用说明api来了解ES如何通过查询来计算文档的分数,这将帮助您根据需要构建正确的查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM