elasticsearch 如何在不影响性能、可伸缩性的情况下获得更好的相关性,并避免Elasticsearch的分片效应,elasticsearch,lucene,sharding,tf-idf,relevance,elasticsearch,Lucene,Sharding,Tf Idf,Relevance" /> elasticsearch 如何在不影响性能、可伸缩性的情况下获得更好的相关性,并避免Elasticsearch的分片效应,elasticsearch,lucene,sharding,tf-idf,relevance,elasticsearch,Lucene,Sharding,Tf Idf,Relevance" />

elasticsearch 如何在不影响性能、可伸缩性的情况下获得更好的相关性,并避免Elasticsearch的分片效应

elasticsearch 如何在不影响性能、可伸缩性的情况下获得更好的相关性,并避免Elasticsearch的分片效应,elasticsearch,lucene,sharding,tf-idf,relevance,elasticsearch,Lucene,Sharding,Tf Idf,Relevance,假设我有一个大索引,由5亿个文档组成,默认情况下,ES创建5个主碎片,原因如下,我也使用相同的设置 性能:-在文档数较少(在我的使用案例中为1亿)的切分中搜索的时间将少于仅在一个文档数巨大(5亿)的切分中搜索的时间。此外,还允许跨碎片分发和并行化操作 水平可伸缩性(HS):-水平分割/缩放内容卷 但是当我们默认搜索时,它只会转到1个碎片并给出结果。在这种情况下,相关性是不准确的(因为idf会受到严重影响),而且如果我的匹配文档位于另一个碎片上,它甚至可能不会给出任何结果。它被称为切分效应 以上问

假设我有一个大索引,由5亿个文档组成,默认情况下,ES创建5个主碎片,原因如下,我也使用相同的设置

  • 性能:-在文档数较少(在我的使用案例中为1亿)的切分中搜索的时间将少于仅在一个文档数巨大(5亿)的切分中搜索的时间。此外,还允许跨碎片分发和并行化操作

  • 水平可伸缩性(HS):-水平分割/缩放内容卷

  • 但是当我们默认搜索时,它只会转到1个碎片并给出结果。在这种情况下,相关性是不准确的(因为idf会受到严重影响),而且如果我的匹配文档位于另一个碎片上,它甚至可能不会给出任何结果。它被称为切分效应

    以上问题已详细解释,有以下两种选择可避免此问题,但我认为这两种解决方案都有一些缺点:-

    1。文档路由:I在这种情况下,所有文档都将位于相同的分片上,从而失去分片的全部目的。
    2。dfs\u查询\u然后\u获取搜索类型:存在与之相关的性能成本

    我有兴趣了解以下信息:

  • 默认情况下ES做什么?或者是否有任何可以控制它的配置
  • ES是否提供了其他开箱即用的解决方案来避免分片效应

  • 首先,如果这部分问题不准确:

    但是当我们搜索时,默认情况下它只会转到1个碎片并给出 结果t。在这种情况下,相关性是不准确的(因为idf主要是 受影响),而且如果我的 文档位于另一个碎片上。它被称为碎片效应

    粗体部分是错误的。搜索请求被发送到所有碎片(当然,或者没有人会使用elasticsearch!),但分数是基于碎片计算的。所以,是的,你可以有一个多碎片的准确性问题,但只有当你有很少的文件。有了5亿,准确度将不会成为问题(除非你对文档传送的使用不当,请参见

    因此,当您搜索一个查询的10个结果时,每个分片都会返回查询的10个最佳匹配项,然后协调节点会聚合分片的结果,从而为整个索引提供10个最佳结果


    您可以使用5个碎片而不必担心任何关联性问题。但不要试图避免碎片效应!这就是elasticsearch如此酷的原因:D

    首先,如果您的问题不准确:

    但是当我们搜索时,默认情况下它只会转到1个碎片并给出 结果t。在这种情况下,相关性并不准确(因为idf主要是 受影响),而且如果我的 文档位于另一个分片上,称为分片效果

    粗体部分为false。搜索请求被发送到所有碎片(当然,或者没有人会使用elasticsearch!),但分数是基于碎片计算的。因此,是的,多个碎片可能会有准确性问题,但只有在文档很少的情况下。有5亿份碎片,准确性不会有问题(除非您错误地使用文档传送,请参见

    因此,当您搜索一个查询的10个结果时,每个分片都会返回查询的10个最佳匹配项,然后协调节点会聚合分片的结果,从而为整个索引提供10个最佳结果


    你可以使用5个碎片而不必担心任何关联性问题。但不要试图避免碎片效应!这就是elasticsearch如此酷的原因:当你的意思是,但当我们搜索默认情况下,它只会转到1个碎片并给出结果。在这种情况下,关联性并不准确(因为idf会受到重大影响)而且,如果我匹配的文档位于另一个碎片上,它甚至可能不会给出任何结果。它被称为碎片效应。-你指的是主碎片的默认数量为1(7.0的情况下)的情况吗?如果不是,我猜该语句是有效的?默认情况下,搜索请求被转发给所有“相关的” shards@Nag,正确的说法是
    搜索请求被转发到所有“相关”碎片
    ,当您的意思是,但当我们默认搜索时,它只会转到1个碎片并给出结果。在这种情况下,相关性不准确(因为idf会受到主要影响)而且,如果我匹配的文档位于另一个碎片上,它甚至可能不会给出任何结果。它被称为碎片效应。-你指的是主碎片的默认数量为1(7.0的情况下)的情况吗?如果不是,我猜该语句是有效的?默认情况下,搜索请求被转发给所有“相关的” shards@Nag,正确的语句是
    搜索请求被转发到所有“相关”分片
    指的是“因此,当您搜索一个查询的10个结果时,每个分片返回查询的10个最佳匹配项,然后协调节点聚合分片的结果,为整个索引提供最佳的10个结果。”,这似乎是有道理的。ES论坛声称相关性统计数据是按碎片计算的,但是,最终-协调节点聚合以返回全局相关性得分。太棒了!!@Nag,是的,你很好地总结了这一点:)参考“因此,当您搜索一个查询的10个结果时,每个分片都会返回查询的10个最佳匹配项,然后协调节点会聚合分片的结果,为整个索引提供10个最佳结果。“,这似乎是有道理的。ES论坛声称相关性统计是按碎片计算的,但是,最终-协调节点聚合返回全局相关性得分。太棒了!!@Na