如何在弹性搜索查询中传递特定字段的值列表

Posted

技术标签:

【中文标题】如何在弹性搜索查询中传递特定字段的值列表【英文标题】:How to pass list of values for a particular field in Elastic Search Query 【发布时间】:2017-01-22 13:32:12 【问题描述】:

我有一个查询要从Elastic Search Cluster 中搜索provider_id。我正在使用下面的查询来获取单个 provider_id 的结果,但在弄清楚如何传递提供者列表时需要帮助。


"query": 
    "bool": 
        "must": [
            "match": 
                "message.provider_id": 
                    "query": 943523,
                    "type": "phrase"
                
            
        ]
    


假设我要搜索provider_ids = [913523, 923523, 923523, 933523, 953523],那么我应该如何修改查询呢?

【问题讨论】:

【参考方案1】:

您可以将 provider_id 索引为 not_analyzed,然后使用术语查询:

POST /test_index/_search

    "query": 
        "terms": 
           "message.provider_id": [
              "913523", "923523", "923523", "933523", "953523"
           ]
        
    

如果您不需要分数,也可以作为带有过滤器的布尔查询:

POST /test_index/_search

   "query": 
      "bool": 
         "filter": [
            
               "terms": 
                  "message.provider_id": [
                      "913523", "923523", "923523", "933523", "953523"
                  ]
               
            
         ]
      
   

【讨论】:

以上是关于如何在弹性搜索查询中传递特定字段的值列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 play 2.4 中的 scala 模板中设置类型列表字段的值?

弹性搜索如何索引嵌套列表

如何过滤掉弹性搜索中不存在的字段?

在弹性搜索中使用 GET/POST 时结果不同

如何仅查询一种类型的记录的弹性搜索?

如何在弹性搜索的过滤器聚合中引用多个嵌套级别?