我们有一些Elasticsearch查询采用以下形式:
{{1}}
我们希望在每个布尔子句上显示命中计数。我们目前的暴力方法是在封面下执行辅助多重搜索,将每个子句拆分为自己的单独查询以获取个别计数。这可能会变得非常昂贵,因为我们支持多达50个这些条款,这些条款可能会导致在幕后执行另外50个查询。
我们一直在寻找其他方法来提取Get matched terms from Lucene query或。{ lucene get matched terms in query但是所有这些都涉及计算实际命中数的bean。这是令人望而却步的,因为我们可能有成千上万的。
是否有另一种更有效的方法/技术(最好是在Elasticsearch中)来获取我们可能错过的那些计数?
答案 0 :(得分:2)
也许添加过滤器聚合可以做到这一点:
{
"query": {
"bool": {
"should": [
{
"query_string": {
"default_field": "content",
"query": "Lorem ipsum dolor sit amet"
}
},
{
"query_string": {
"default_field": "content",
"query": "Nunc ac auctor massa"
}
}
]
}
},
"aggs": {
"2": {
"filters": {
"filters": {
"message:fake": {
"query": {
"query_string": {
"query": "content: \"Lorem ipsum dolor sit amet\"",
"analyze_wildcard": true
}
}
},
"message:data": {
"query": {
"query_string": {
"query": "content:\"Nunc ac auctor massa\"",
"analyze_wildcard": true
}
}
}
}
}
}
}
}
因此,您将了解它们分别显示的文档数量。