Elasticsearch上_search上的“首选项”和“ search_type”之间的结果差异

我正在尝试为ElasticSearch结果获得一致的评分,并且我需要克服第一部分中所述的问题:https://www.elastic.co/guide/en/elasticsearch/reference/master/consistent-scoring.html

我相信答案可能是使用首选项,例如_search?preference = _only_local或preference = xyzabc123。但是,我不确定。当我使用_search?search_type = dfs_query_then_fetch时,我得到了不同的分数,并且似乎search_type总是会给出最一致的评分。但是,由于结果与使用首选项参数进行的搜索不同,因此我不确定-结果的顺序会有所不同,因为使用偏好样式搜索的顶部结果在执行search_type样式搜索时得分较低(这意味着其他文档现在得分更高)。

首选项结果如下:

  "took" : 13,"timed_out" : false,"_shards" : {
    "total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0
  },"hits" : {
    "total" : 1886,"max_score" : 4.765499,"hits" : ...

search_type结果如下:

  "took" : 8,"max_score" : 4.68168,"hits" : ...

我对dfs_query_then_fetch犹豫不决,因为有一条注释说生产中不需要它,但是我需要一些东西可以将相同的结果返回到连续两次或更多次执行的查询中,而不会得到不同的结果每次设置一次(实际上,在不使用这些参数之一的情况下运行_search会返回两个不同的结果集,并在这两个之间来回翻转触发器。

a469096355 回答:Elasticsearch上_search上的“首选项”和“ search_type”之间的结果差异

TLDR:对于同一查询,您必须使用preference来确保结果的一致性,还可以使用search_type来提高准确性。

我认为您所引用的文档包含许多帮助您了解search_typepreference参数的信息。除了这些以外,这些还可能会帮助您

根据您已经尝试过的一些内容,看来您可能已经找到并依赖这些内容。

将信息汇总在一起,以下是有关search_type的一些注意事项:

  • 两个选项:query_then_fetch(默认),dfs_query_then_fetch
  • dfs_query_then_fetch通过使分布式群集中的一个节点聚集并合并来自包含随机分布文档的多个分片(索引)的统计信息,从而在分片级别上变化统计信息,从而提供了“更准确的评分”。缺点是随着查询复杂性的增加,这种协调可能会牺牲性能。

那么,为什么不解决并使用dfs_query_then_fetch呢?我相信这是由于您所引用的文档中有一个重要说明。分片和副本中的统计信息因删除的文档而异。

  

但是出于实际原因,这些已删除的文档会被考虑用于索引统计

     

...那么它的索引统计信息可能与副本(仍然有大量已删除文档)完全不同,因此得分也不同

我认为,由于诸如分片,副本之类的精妙之处,即使dfs_query_then_fetch也可能不足以保证获得相同的结果集。对于一个请求,ES可能决定根据主分片返回结果,而在下一个请求中,ES可能决定根据具有不同统计信息的副本决定返回结果。

因此,您必须声明您的preference。偏好参数允许您通过在请求之间传递相同的参数值来指示Elasticsearch击中相同的分片集。并且它会在注释时显示尽可能多的信息:

  

解决此问题的推荐方法是使用一个字符串来标识所登录的用户(例如,用户ID或会话ID)作为首选项。这样可以确保给定用户的所有查询始终会打到相同的分片,从而使各个查询的得分保持更加一致。

但是,您可能有一个要求,当两个用户执行相同的搜索,或者一个用户向另一个用户共享结果集的url时,两个人都希望所有执行单个查询q的用户都收到相同的结果集,前提是尚未更新。您可以做的是利用为preference参数提供自定义字符串值的功能,并可能对用户查询进行哈希处理,以便为具有相同查询的请求发送相同的首选项值。这样可以确保查询“ ES为什么用不同的结果诱骗我?”由两个单独的用户得出的结果相同。

注意:如果您为每个请求传递相同的preference值,而不管查询是什么,那么您将失去分布式搜索的目的。我也不知道您的分片/副本设置是什么样子,但我相信文档中的这些特定详细信息很可能会突出显示/解释您的观察结果。

本文链接:https://www.f2er.com/3122103.html

大家都在问