Java hasParentQuery中的Elasticsearch命名查询不起作用?
我做了一个测试来测试我是否在hasParentQuery中得到了正确的命名查询。但它似乎不起作用 运行elasticsearch 2.4时,我找不到有关它的任何信息。或者可能是一只虫子? 输出Java hasParentQuery中的Elasticsearch命名查询不起作用?,java,elasticsearch,Java,elasticsearch,我做了一个测试来测试我是否在hasParentQuery中得到了正确的命名查询。但它似乎不起作用 运行elasticsearch 2.4时,我找不到有关它的任何信息。或者可能是一只虫子? 输出 parent outerBool // "innerBool" and "term" should also be here? JSON搜索查询 { "query": { "bool": { "must": { "has_parent": {
parent
outerBool
// "innerBool" and "term" should also be here?
JSON搜索查询
{
"query": {
"bool": {
"must": {
"has_parent": {
"query": {
"bool": {
"should": {
"term": {
"value": {
"value": "1",
"_name": "term"
}
}
},
"_name": "innerBool"
}
},
"parent_type": "branch",
"_name": "parent"
}
},
"_name": "outerBool"
}
}
}
和测试:
client.admin().indices().create(new CreateIndexRequest("my_index")).actionGet();
String employee =
IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream("employeeMapping.json"));
client.admin().indices().preparePutMapping("my_index")
.setType("employee").setSource(employee).execute().actionGet();
String branch = IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream("branchMapping.json"));
client.admin().indices().preparePutMapping("my_index").setType("branch").setSource(branch).execute()
.actionGet();
String parentId = "1";
client.prepareIndex("my_index", "branch", parentId)
.setSource(new HashMap<String, Object>() {{
put("value", "1");
put("value2", "2");
}}).execute().actionGet();
client.prepareIndex("my_index", "employee", parentId)
.setSource(new HashMap<String, Object>() {{
put("id", "1");
}}).setParent(parentId).execute().actionGet();
Thread.sleep(1000);
SearchRequestBuilder searchRequestBuilder = client.prepareSearch("my_index").setTypes("employee").setQuery(
QueryBuilders.boolQuery().must(
QueryBuilders.hasParentQuery("branch",
QueryBuilders.boolQuery()
.should(QueryBuilders.termQuery("value", "1").queryName("term")).queryName("innerBool")
).queryName("parent")
).queryName("outerBool")
);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
Arrays.stream(searchResponse.getHits().getHits()[0].getMatchedQueries()).forEach(q ->
System.out.println(q)
);
employeeMapping.json
{
"properties": {}
}
{
"_parent": {
"type": "branch"
}
}
我必须将innerHits添加到父查询中,以便在响应中添加innerHits元素,并从中获得匹配的查询
QueryBuilders.hasParentQuery("branch",
QueryBuilders.boolQuery()
.should(QueryBuilders.termQuery("value", "1").queryName("term")).queryName("innerBool"))
.queryName("parent")
.innerHit(new QueryInnerHitBuilder())
我必须将innerHits添加到父查询中,以便在响应中添加innerHits元素,并从中获得匹配的查询
QueryBuilders.hasParentQuery("branch",
QueryBuilders.boolQuery()
.should(QueryBuilders.termQuery("value", "1").queryName("term")).queryName("innerBool"))
.queryName("parent")
.innerHit(new QueryInnerHitBuilder())