gpt4 book ai didi

java - 在hasParentQuery内部的Elasticsearch命名查询不起作用吗?

转载 作者:行者123 更新时间:2023-12-03 00:10:12 26 4
gpt4 key购买 nike

我进行了测试,以测试是否在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"
}
}

最佳答案

我必须将inner_hits添加到父查询中,以便添加响应中的innerHits元素,然后可以从那里获取matchedQueries。

QueryBuilders.hasParentQuery("branch",
QueryBuilders.boolQuery()
.should(QueryBuilders.termQuery("value", "1").queryName("term")).queryName("innerBool"))
.queryName("parent")
.innerHit(new QueryInnerHitBuilder())

关于java - 在hasParentQuery内部的Elasticsearch命名查询不起作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41430278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com