我正在尝试使用 java api 对以下 json 运行搜索
{
"query": {
"has_child": {
"query" : {
"filtered": {
"query": { "match_all": {}},
"filter" : {
"and": {"filters":[
{"term": {"term": "value"}}
]}
}
}
},
"child_type": "child"
}
}
}
这是我的java代码,
QueryBuilders.hasChildQuery("child", QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.andFilter(FilterBuilders.
termFilter("term", "value"))));
但是这只会生成 json
{"has_child":
{"query":
{"filtered":
{"query":{"match_all":{}},
"filter":{
"and":
{"filters":[
{"term":{"term":"value"}}
]
}
}
}
},
"child_type":"child"
}
}
如您所见,我缺少顶级 { "query": ... }
但我无法找到如何使用 Elasticsearch 的 java api 添加此顶级查询。
最佳答案
根据我对代码的理解
client.prepareSearch("parent-child")
.setSearchType(SearchType.QUERY_THEN_FETCH)
.setQuery(query)
.setFrom(0).setSize(60).setExplain(true)
.execute()
.actionGet();
它使用 {"query": ...}
自动包装查询
我的问题是我搜索了错误的索引。
关于java - Elasticsearch java 顶级查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27485837/