ElasticSearch Java 客户端查询嵌套对象

Posted

技术标签:

【中文标题】ElasticSearch Java 客户端查询嵌套对象【英文标题】:ElasticSearch Java Client querying nested objects 【发布时间】:2014-09-02 20:27:26 【问题描述】:

如何转换这种查询。


  "query": 
    "nested": 
      "path": "consultations",
      "query": 
        "bool": 
          "must": [
            
              "match": 
                "consultations.prescriptions": "alfuorism"
              
            ,
            
              "match": 
                "consultations.Diagnosis": "Fever"
              
            
          ]
        
      
    
  

使用 QueryBuilders 到 Java 客户端查询

【问题讨论】:

【参考方案1】:

以下 Java 代码将生成您的查询

public NestedQueryBuilder nestedBoolQuery(final Map<String, String> propertyValues, final String nestedPath) 

    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    Iterator<String> iterator = propertyValues.keySet().iterator();

    while (iterator.hasNext()) 
        String propertyName = iterator.next();
        String propertValue = propertyValues.get(propertyName);
        MatchQueryBuilder matchQuery = QueryBuilders.matchQuery(propertyName, propertValue);
        boolQueryBuilder.must(matchQuery);
    

    return QueryBuilders.nestedQuery(nestedPath, boolQueryBuilder);

参数propertyValues为:

Map<String, String> propertyValues = new HashMap<String, String>();
propertyValues.put("consultations.prescriptions", "alfuorism");
propertyValues.put("consultations.Diagnosis", "Fever");

参数nestedPath为:

consultations

【讨论】:

propertValue 应该是propertyValue 如果您有超过 2 个级别,这将如何创建?例如,如果它类似于“xyz.consultations.prescriptions”。

以上是关于ElasticSearch Java 客户端查询嵌套对象的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch聚合查询

ElasticSearch第二天

mongoDB在java中怎么根据内嵌文档条件查询

Elasticsearch Java Rest Client API

Elasticsearch——使用Java API实现ES中的索引映射文档操作

Elasticsearch——使用Java API实现ES中的索引映射文档操作