0
我做了一個測試,以測試我在hasParentQuery中獲得了正確的命名查詢。但它似乎不起作用。Elasticsearch在hasParentQuery中命名查詢不起作用?
運行elasticsearch 2.4,我找不到任何有關它的信息。或者它可能是一個錯誤? https://www.elastic.co/guide/en/elasticsearch/reference/2.4/search-request-named-queries-and-filters.html
輸出
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)
);
branchMapping.json
{
"properties": {}
}
employeeMapping.json
{
"_parent": {
"type": "branch"
}
}