【问题标题】:Inconsistent result set结果集不一致
【发布时间】:2017-04-04 20:47:47
【问题描述】:

我正在尝试在 Elasticsearch 中进行查询,但我一次又一次地从 Elasticsearch 中获得不同的结果集以获取相同的查询。我的集群有 3 个分片和 2 个副本。我的第一个猜测是,这可能是因为分片在起作用,因此我尝试使用 dfs_query_then_fetch 进行查询,但我仍然遇到同样的问题,经过大量搜索后,我发现它正在搜索的分片正在改变,所以我使用偏好来查询。我仍然观察到同样的问题。我现在没有选择,无法弄清楚问题所在。 在这里粘贴我的查询

POST _search?search_type=dfs_query_then_fetch&preference=metiswayfinder
{  
   "query":{  
      "multi_match":{  
         "query":"this is a test",
         "fields":[  
            "subject^3",
            "message"
         ]
      }
   },
   "sort":[  
      {  
         "_score":{  
            "order":"desc"
         }
      },
      {  
         "incidentcount":{  
            "order":"desc"
         }
      }
   ]
}

相关性分数对我来说至关重要,而且我观察到每次搜索时分数都会不断变化。 Elasticsearch 给出不一致的结果集和不一致的分数。我可以通过任何方式中和这两种情况而无需太多改变。 添加分段查询结果

谢谢 阿什特

【问题讨论】:

  • 这个索引中有多少文档?
  • 我有大约 100 万条内容分布在 3 个分片中
  • 你的测试和结果是在这个包含 100 万个文档的 3 个分片索引上?
  • @AndreiStefan 是的
  • 你使用自定义路由吗?你能提供GET /_cat/segments?v&index=YOUR_INDEX_NAME的结果吗?

标签: elasticsearch elasticsearch-plugin


【解决方案1】:

看看https://www.elastic.co/guide/en/elasticsearch/reference/master/consistent-scoring.html

根据您帖子中的 cmets,您似乎已经确定使用复制删除文档会导致此问题 - 尽管此帖子有助于解释原因。至于下一步该做什么,文章建议如下:

解决此问题的推荐方法是使用一个字符串来标识所记录的用户(例如用户 ID 或会话 ID)作为 preference。这可以确保给定用户的所有查询总是会命中相同的分片,因此查询之间的分数保持更加一致。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多