弹性搜索首选项设置为自定义值,文档仍然从不同的分片返回

时间:2016-06-29 15:01:43

标签: elasticsearch

我在评分方面遇到问题:当我多次运行相同的查询时,每个文档都没有以相同的方式评分。我发现这个问题众所周知,它是bouncing result issue

一点上下文:我在多个节点上有多个分片(60个分片,10个数据节点),所有节点都在使用ES 2.3,我们大量使用嵌套文档 - 示例查询没有为简单起见,使用它们。

我尝试使用带有自定义值的preference搜索参数来解决此问题。文档说明:

  

将使用自定义值来保证相同的分片将用于相同的自定义值。这有助于“跳跃价值”和“#34;在不同的刷新状态下击中不同的分片时。示例值可以是Web会话ID或用户名。

但是,当我多次运行此查询时:

GET myindex/_search?preference=asfd
{
  "query": {
    "term": {
      "has_account": {
        "value": "twitter"
      }
    }
  }
}

我最终拥有相同的文件,但得分/排序不同。如果我启用explain,我可以看到这些文档来自不同的分片。 如果我使用preference=_primarypreference=_replica,我们会有预期的行为(总是相同的分片,总是相同的评分/排序),但我不能仅查询其中一个...... < / p>

我还尝试了search_type=dfs_search_then_fetch,它应该在所有分片中基于整个索引生成评分,但我仍然会对每次查询运行得到不同的评分。

简而言之,在用户会话期间,如何确保查询结果的分数和排序保持不变?

1 个答案:

答案 0 :(得分:2)

看起来我的副本与初选不同步。 不知道为什么,但是删除副本并重新创建它们已经“修复”了问题......我需要对它失去同步的原因进行一些调查

编辑2016年10月21日

关于未考虑的“首选项”选项,它与AWS区域感知链接:如果首选副本位于客户机节点之外的其他区域,则将忽略该首选项。

如果您删除(或更新)文档,副本之间的差异是“正常的”,根据我的理解,删除的文档计数将在副本之间变化,因为它们不一定同时合并段。