查询1:获取带有字段" user"的1个文档=" kimchy"。
GET /_search
{
"from" : 0, "size" : 1,
"query" : {
"term" : { "user" : "kimchy" }
}
}
查询2:使用字段" user"获取1个文档=" elasticsearch"。
GET /_search
{
"from" : 0, "size" : 1,
"query" : {
"term" : { "user" : "elasticsearch" }
}
}
查询3:获取带有字段" user"的2个文档要么=" kimchy"或" elasticsearch"。
GET /_search
{
"from" : 0, "size" : 2,
"query": {
"constant_score" : {
"filter" : {
"terms" : { "user" : ["kimchy", "elasticsearch"]}
}
}
}
}
Query3中的问题是多个文档可以拥有" user" as" kimchy"或" elasticsearch"在第三个查询中,我们可能会同时获得用户" kimchy"或者两个文件都有用户" elasticsearch"。我们如何修改此术语查询或编写其他查询以使用" user"获取1个文档。 =" kimchy"和另一个用户=" elasticsearch"。
的文件一种解决方案是使用Query1,2进行多重查询。但有没有其他方法来解决这个问题,即获取每个"术语的一个文件"输入
答案 0 :(得分:2)
是的,还有另一种方法,使用terms
和top_hits
聚合的混合,如下所示:
GET /_search
{
"from": 0,
"size": 0,
"query": {
"constant_score": {
"filter": {
"terms": {
"user": [
"kimchy",
"elasticsearch"
]
}
}
}
},
"aggs": {
"users": {
"terms": {
"field": "user"
},
"aggs": {
"sample": {
"top_hits": {
"size": 1,
"sort": {
"_script": {
"script": {
"source": "(doc._id.value + salt).hashCode()",
"params": {
"salt": "some_random_string"
}
},
"type": "number",
"order": "asc"
}
}
}
}
}
}
}
}
对于每位用户kimchy
和elasticsearch
,您将获得一个匹配的文档。