根据 Elasticsearch 中不同索引中存在的字段进行查询

Posted

技术标签:

【中文标题】根据 Elasticsearch 中不同索引中存在的字段进行查询【英文标题】:Query based on Fields existing in different Indices in Elasticsearch 【发布时间】:2017-02-17 11:23:08 【问题描述】:

我有以下查询


   "from":0,
   "size":50000,
   "_source":[
      "T121",
      "timestamp"
   ],
   "sort":
      "timestamp":
         "order":"asc"
      
   ,
   "query":
      "bool":
         "must":
            "range":
               "timestamp":
                  "gte":"2017-01-17 11:44:41.347",
                  "lte":"2017-02-18 11:44:47.878"
               
            
         ,
         "must":
            "exists":
               "field":"T121"
            
         
      
   

http://172.22.23.169:9200/index1,index2,Index3/_search?pretty

通过这个 URL,我想查询 Elasticsearch 中的多个索引,并且只返回那些存在特定字段的文档。

是否可以在我定义的“exists”子句中放入字段列表 如果其中一个文档中存在“field1”或“field2”或“fiedl3”,则返回它,否则不要,或者我必须编写这样的案例吗?

【问题讨论】:

【参考方案1】:

要搜索所有索引,请使用 > http://172.22.23.169:9200/_search?pretty

要搜索选定的索引,请将以下过滤器添加到“布尔”过滤器

"must": 
  "terms": 
    "_index": [
      "index1",
      "index2"
    ]
  

对于多个“exists”进行 OR'ing,您可以使用 should 子句与多个存在并指定“minimum_should_match”来控制搜索记录。


  "from":0,
  "size":50000,
  "_source":[
    "T121",
    "timestamp"
  ],
  "sort":
    "timestamp":
      "order":"asc"
    
  ,
  "query":
    "bool":
      "must":
        "range":
          "timestamp":
            "gte":"2017-01-17 11:44:41.347",
            "lte":"2017-02-18 11:44:47.878"
          
        
      ,
      "should":[
        
          "exists":
            "field":"field1"
          
        ,
        
          "exists":
            "field":"field2"
          
        ,
        
          "exists":
            "field":"field3"
          
        
      ]
    
  

【讨论】:

以上是关于根据 Elasticsearch 中不同索引中存在的字段进行查询的主要内容,如果未能解决你的问题,请参考以下文章

Java + SpringBoot 操作 ElasticSearch7.x.x工具类RestHighLevelClientUtils

Java + SpringBoot 操作 ElasticSearch7.x.x工具类RestHighLevelClientUtils

Java + SpringBoot 操作 ElasticSearch7.x.x工具类RestHighLevelClientUtils

ElasticSearch7.3学习(十六)----RestHighLevelClient Java api实现索引的创建删除是否存在关闭开启

elasticsearch之索引模板

ES 16 - 对Elasticsearch中的索引数据进行增删改查(CRUD)