如何在 Elastic 中使用两个索引过滤查询中的每个索引?

How to filter each index in a query with two indexes in Elastic?

我正在尝试进行查询以获取有关 Elastic 中两个不同索引的信息:

GET _search
{
  "query": {
    "bool": {
      "must" : [{
        "bool" : {
          "should" : [{
             "match" : {
               "action": "VoiceQueueAbandonAction"
              }},
              { 
              "match" : {
                "action": "QualifyVoiceWel"
              } 
             }     
           ]
          }
         }
       ],
      "filter": {
        "range": {
          "created_at": {
            "gte": "2022-05-04 00:00:00",
            "lte": "2022-05-04 23:59:59"
          }
        }
      }
    }
  }
}

输入正确,但重复了信息,因为在索引“qualifications”和“queueevents”中有相同的操作“QualifyVoiceWel”。

在这种情况下,我需要过滤“QualifyVoiceWel”字段仅来自资格索引,而不是来自队列事件!

根据您的要求两个选项:

  • 通过//_search
  • 查询正确的索引

  • 索引名称可以作为 _index 在查询中使用。 This 文档提供了更多详细信息

您可以在现有 should 中添加 bool 子句,如下所示:

{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "match": {
                  "action": "VoiceQueueAbandonAction"
                }
              },
              {
                "bool": {
                  "must": [
                    {
                      "match": {
                        "action": "QualifyVoiceWel"
                      }
                    },
                    {
                      "term": {
                        "_index": {
                          "value": "qualifications"
                        }
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      ],
      "filter": {
        "range": {
          "created_at": {
            "gte": "2022-05-04 00:00:00",
            "lte": "2022-05-04 23:59:59"
          }
        }
      }
    }
  }
}