以下查询正常工作,并返回我需要的结果。我正在努力使用JAVA API编写此代码。
{
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "somepath",
"query": {
"bool": {
"filter": [
{
"terms": {
"somepath.key": ["key1", "key2", "key3"]
}
}
]
}
}
}
}
]
}
}
}
我在JAVA中使用它。我想念什么? commaSeparatedKeyString =“key1,key2,key3” QueryBuilders.boolQuery().must(QueryBuilders.nestedQuery(
"somepath",
QueryBuilders.boolQuery().filter(QueryBuilders.termsQuery("somepath.key", commaSeparatedKeyString)),
ScoreMode.Total));
最佳答案
出于调试目的,检查正在构建的查询的JSON序列化可能会有所帮助。幸运的是,查询构建器中的toString()方法为您完成了此操作,因此您可以简单地使用System.out.println将查询构建器打印到stdout(或使用日志记录框架对其进行记录)。假设变量commaSeparatedKeyString设置为“key1,key2,key3”(听起来像是,但是您没有告诉我们),您实际上是在创建以下查询:
{
"bool" : {
"must" : [
{
"nested" : {
"query" : {
"bool" : {
"filter" : [
{
"terms" : {
"somepath.key" : [
"key1,key2,key3"
],
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"path" : "somepath",
"ignore_unmapped" : false,
"score_mode" : "sum",
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
如您所见,您所需要的查询和正在构建的查询至少有两个相关的区别:"bool.filter..."
开头,但是您正在使用"bool.must..."
构建查询:QueryBuilders.boolQuery()。 必须(QueryBuilders.nestedQuery(
termsQuery(“somepath.key”,“key1”,“key2”,“key3”))
关于java - 如何使用Java API编写此Elasticsearch查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62543679/