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

如何转换这种查询。

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

使用 QueryBuilders 到 Java 客户端查询

【问题讨论】:

    标签: java elasticsearch spring-data spring-data-elasticsearch


    【解决方案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”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多