我在评分方面遇到问题:当我多次运行相同的查询时,每个文档都没有以相同的方式评分。我发现这个问题众所周知,它是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=_primary
或preference=_replica
,我们会有预期的行为(总是相同的分片,总是相同的评分/排序),但我不能仅查询其中一个...... < / p>
我还尝试了search_type=dfs_search_then_fetch
,它应该在所有分片中基于整个索引生成评分,但我仍然会对每次查询运行得到不同的评分。
简而言之,在用户会话期间,如何确保查询结果的分数和排序保持不变?
答案 0 :(得分:2)
看起来我的副本与初选不同步。 不知道为什么,但是删除副本并重新创建它们已经“修复”了问题......我需要对它失去同步的原因进行一些调查
编辑2016年10月21日
关于未考虑的“首选项”选项,它与AWS区域感知链接:如果首选副本位于客户机节点之外的其他区域,则将忽略该首选项。
如果您删除(或更新)文档,副本之间的差异是“正常的”,根据我的理解,删除的文档计数将在副本之间变化,因为它们不一定同时合并段。