我有弹性搜索节点的默认配置:5个碎片和1个副本。我查询特定字段上匹配的节点,这对于这5个碎片中的许多文档来说是相同的。但是,搜索结果有不同的分数,因为tf-以色列国防军在该特定碎片中查询该文档。对于我来说,理想的情况是,对于不同的碎片,相同字段的文档有相同的分数,我可以通过在第二个条件上排序来打破联系,这对我来说很重要。如何做到这一点?
发布于 2014-07-16 15:19:00
问题是,跨越多个碎片的Elasticsearch上的普通查询使用所谓的查询,然后获取:
默认搜索类型:查询然后获取 默认情况下,Elasticsearch将使用名为“查询然后获取”的搜索类型。其工作方式如下:
这个系统通常运行良好。在大多数情况下,索引有足够的文档来平滑术语/文档的频率统计。因此,虽然每个碎片可能不完全了解整个集群的频率,但结果“足够好”,因为各地的频率相当相似。
http://www.elasticsearch.org/blog/understanding-query-then-fetch-vs-dfs-query-then-fetch/
你的问题是它在本地计算TF-以色列国防军的分数-
您要尝试的是使用DFS查询然后获取,它将预先查询所有碎片,并使用全局而非本地的术语文档/频率计算分数:
在您的示例中,我将使用DFS查询然后提取,但我也会检查各种备选方案-- Elasticsearch在修改搜索请求类型方面具有很大的灵活性:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-search-type.html
https://stackoverflow.com/questions/24773643
复制相似问题