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 Java Rest Client API