首先创建一些示例数据(e1,e2,e3是类型,test是索引名称):
PUT test/e1/1
{
"id":1
"subject": "subject 1"
}
PUT test/e2/1
{
"id":1
"subject": "subject 2"
}
PUT test/e3/2
{
"id":2
"subject": "subject 3"
}
现在我的问题是:我怎样才能获得这两个数据?删除curl -XGET _search
结果中具有相同ID的重复数据。
test/e1/1
{
"id":1
"subject": "subject 1"
}
test/e3/2
{
"id":2
"subject": "subject 3"
}
答案 0 :(得分:12)
首先,您需要搜索多个索引 然后,在结果中删除重复的ID。
POST http://myElastic.com/test/e1,e2,e3/_search
{
"aggs":{
"dedup" : {
"terms":{
"field": "id"
},
"aggs":{
"dedup_docs":{
"top_hits":{
"size":1
}
}
}
}
}
}
这可能会对您有所帮助:
答案 1 :(得分:2)
查看 Field Collapsing - 它旨在为每个“字段”提供 1 个搜索结果。
GET /test/_search
{
"collapse": {
"field": "id"
}
}
在将此功能添加到 Elasticsearch 之前,使用热门搜索词聚合是实现此目的的最佳方法。