首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >因为切分导致搜索结果不好?

因为切分导致搜索结果不好?
EN

Stack Overflow用户
提问于 2014-07-16 06:28:14
回答 1查看 1.8K关注 0票数 3

我有弹性搜索节点的默认配置:5个碎片和1个副本。我查询特定字段上匹配的节点,这对于这5个碎片中的许多文档来说是相同的。但是,搜索结果有不同的分数,因为tf-以色列国防军在该特定碎片中查询该文档。对于我来说,理想的情况是,对于不同的碎片,相同字段的文档有相同的分数,我可以通过在第二个条件上排序来打破联系,这对我来说很重要。如何做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-16 15:19:00

问题是,跨越多个碎片的Elasticsearch上的普通查询使用所谓的查询,然后获取:

默认搜索类型:查询然后获取 默认情况下,Elasticsearch将使用名为“查询然后获取”的搜索类型。其工作方式如下:

  • 将查询发送到每个碎片
  • 查找所有匹配的文档并使用本地术语/文档频率计算分数。
  • 构建结果的优先级队列(排序、用from/to进行分页等)
  • 将有关结果的元数据返回给请求节点。注意,实际的文档还没有发送,只发送分数。
  • 所有碎片的分数都在请求节点上合并和排序,文档根据查询标准进行选择。
  • 最后,从它们所在的各个碎片中检索实际的文档。
  • 结果将返回给客户端。

这个系统通常运行良好。在大多数情况下,索引有足够的文档来平滑术语/文档的频率统计。因此,虽然每个碎片可能不完全了解整个集群的频率,但结果“足够好”,因为各地的频率相当相似。

http://www.elasticsearch.org/blog/understanding-query-then-fetch-vs-dfs-query-then-fetch/

你的问题是它在本地计算TF-以色列国防军的分数-

您要尝试的是使用DFS查询然后获取,它将预先查询所有碎片,并使用全局而非本地的术语文档/频率计算分数:

  • 每个切分询问术语和文档的频率
  • 将查询发送到每个碎片
  • 查找所有匹配的文档,并使用从预查询中计算出的全局术语/文档频率计算分数。
  • 构建结果的优先级队列(排序、用from/to进行分页等)
  • 将有关结果的元数据返回给请求节点。注意,实际的文档还没有发送,只发送分数。
  • 所有碎片的分数都在请求节点上合并和排序,文档根据查询标准进行选择。
  • 最后,从它们所在的各个碎片中检索实际的文档。
  • 结果将返回给客户端。

在您的示例中,我将使用DFS查询然后提取,但我也会检查各种备选方案-- Elasticsearch在修改搜索请求类型方面具有很大的灵活性:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-search-type.html

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24773643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档