我在elasticsearch中遇到嵌套查询问题。我正在通过java api构建一个复杂的嵌套查询,以便对我的索引运行一个过滤的查询。从弹性搜索返回的结果表明有1个匹配([总计:1,花费:79毫秒]),但这并不是作为响应的一部分返回任何“命中”。
def response = client.search(request).actionGet()
def searchHits = response.hits() // <--- this is empty
result.total = searchHits.totalHits() // <--- this is populated with one
result.took = response.getTook()
通过curl或rest客户端正确运行完全相同的查询会返回整个匹配文档。因此我知道在两种情况下都能正确构造查询。
size和from参数都设置为默认值,应该返回文档。
如果我将嵌套查询移动到过滤器部分,我会得到相同的匹配文档,但会填充hits()对象。
查询本身位于
之下{
"filtered" : {
"query" : {
"bool" : {
"must" : [ {
"nested" : {
"query" : {
"bool" : {
"must_not" : {
"bool" : {
"must" : [ {
"range" : {
"nested.from" : {
"from" : "2013-06-01T23:00:14.343Z",
"to" : "2013-06-02T23:00:14.343Z",
"include_lower" : true,
"include_upper" : true
}
}
}, {
"term" : {
"nested.status" : "accepted"
}
} ]
}
},
"should" : [ {
"bool" : {
"must" : [ {
"range" : {
"nested.from" : {
"from" : "2013-06-01T23:00:14.343Z",
"to" : "2013-06-02T23:00:14.343Z",
"include_lower" : true,
"include_upper" : true
}
}
}, {
"term" : {
"nested.status" : "saved"
}
} ]
}
} ]
}
},
"path" : "nested"
}
} ]
}
} ]
}
},
"filter" : {
"and" : {
"filters" : [ {
"type" : {
"value" : "user"
}
}]
}
}
}
}
答案 0 :(得分:0)
已修复 - 已升级为新版本的elasticsearch。
似乎版本0.20.x及以下版本不喜欢使用java api构建的嵌套查询。