不确定如何在Elasticsearch中像 union 那样执行SQL。我尝试了 bool 查询,但它还没有达到我的要求。例如,文档结构是
{
"id": "123",
"authorId": 28,
"title": "Five Ways to Tap into...",
"byLine": "ashd jsabbdjs international",
"category": "Cat1"
}
当用户输入内容时,我需要在每个"类别" 中找到前5个匹配的"标题" 。这可以使用Elasticsearch的多个查询来完成,但我想知道是否有其他方法可以在一个请求中执行此操作。
答案 0 :(得分:1)
使用top_hits
子聚合聚合:
{
"size": 0,
"query": {"match_all": {}},
"aggs": {
"categories": {
"terms": {
"field": "category",
"size": 10
},
"aggs": {
"top_5": {
"top_hits": {
"size": 5
}
}
}
}
}
}
答案 1 :(得分:0)
以下是基于“category”
返回多个存储桶的查询{
"size": 0,
"query": {
"bool": {
"must": [
{
"terms": {
"authorId": [
1,
28
]
}
}
],
"should": [
{
"query_string": {
"query": "*int*",
"fields": [
"title^2",
"byLine^1"
]
}
}
]
}
},
"aggs": {
"categories": {
"terms": {
"field": "category",
"size": 10
},
"aggs": {
"top_5": {
"top_hits": {
"size": 5
}
}
}
}
}
}