我在 Elasticsearch 中有多个索引(以及使用 django-elasticsearch-dsl 创建的 Django 中的相应文档)。所有索引都有以下设置:
settings = {'number_of_shards': 1,
'number_of_replicas': 0}
现在,我尝试对所有 10 个索引执行搜索。为了在不同索引的结果之间检索一致的评分,我使用dfs_query_then_fetch https://www.elastic.co/blog/understanding-query-then-fetch-vs-dfs-query-then-fetch:
search = Search(index=['mov*'])
search = search.params(search_type='dfs_query_then_fetch')
objects = search.query("multi_match", query='Tom & Jerry', fields=['title', 'actors'])
由于得分不一致,我得到了不好的结果。有一本书叫‘杰瑞和他的朋友汤姆的故事“从一项指标来看可以排得比动画片还高”汤姆和杰瑞' 来自另一个索引。原因是dfs_query_then_fetch不管用。当我删除它或用简单的替换时查询然后获取,我得到完全相同的结果和相同的得分。
我也在 URI 请求上对其进行了测试,并且对于两种搜索类型我总是得到相同的分数。
可能是什么原因呢?
UPDATE:结果其实不一样,但只是确实略有不同,例如有 dfs 的得分为 50.1,无 dfs 的得分为 50.0,而同一模型在一个指数内的得分为 80.0。
如果分片数量为1,则dfs_query_then_fetch和query_then_fetch将返回相同的结果。 DFS 查询将对所有分片进行查询,然后根据计算出的分数向您显示结果,但在本例中只有一个分片。
关于评分,你可能也想看看你的演员阵容。另外,如果您使用了自定义分析器和分词器,请告诉我们什么是分析器和分词器?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)