【问题标题】:Merge Multisearch into a single query in Elasticsearch and execute over all of the indices将 Multisearch 合并到 Elasticsearch 中的单个查询中并在所有索引上执行
【发布时间】:2021-07-26 09:55:30
【问题描述】:

我有一个python 应用程序,它使用elasticsearch-dsl 构造4 非常复杂(但在架构方面相同)elasticsearch 查询。它们中的每一个都执行到一个单独的索引。我的目标是将它们与其所有字段合并在一起(例如,如果所有字段中都有一个键 samples 列表,我需要将所有字段中的 samples 合并到最终查询的最终 list 中) 并对所有索引执行。我不确定这里最好的是什么,以及是否可能与elasticsearch-dsl 一起使用。非常感谢任何建议。

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl


    【解决方案1】:

    我不确定我是否完全理解您的要求,但至少对于对多个索引执行一个查询,您应该查看Search multiple data streams and indices

    所以你可以使用

    GET /my-index-1,my-index-2,my-index-whatever/_search
    

    在这种情况下,如果您的所有索引都具有相同的前缀,您甚至可以使用:

    GET /my-index-*/_search
    

    【讨论】:

    • 它是其中的一部分,另一部分是我如何将非常长的查询组合在一起而无需自己手动重建它。这可能是不可能的,但我还是问,也许有人对此有想法。假设有4 查询:q1q2q3q4,如何将它们合并到所有索引?可以使用elasticsearch-dsl 将查询构建到非常大的查询。
    • 您能否提供这些查询的示例?否则 - 至少对我来说 - 很难猜出你想要实现什么。
    【解决方案2】:

    您可以使用multisearch api 来组合多个查询,甚至可以定位到多个索引。

    例如

    GET index1,index2,index3/_msearch
    { }
    {"query":{//q1}}
    { }
    {"query":{//q2}}
    { }
    {"query":{//q3}}
    { }
    {"query":{//q4}}
    

    您甚至可以限制特定查询的索引。例如。如果您希望 q4 仅在 index1 上执行,则更改如下:

    GET index1,index2,index3/_msearch
    { }
    {"query":{//q1}}
    { }
    {"query":{//q2}}
    { }
    {"query":{//q3}}
    {"index":"index1"}
    {"query":{//q4}}
    

    在这种情况下,q1q2q3 将在索引 index1index2index3 上执行,而 q4 将仅在 index1 上执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多