如何删除elasticsearch中的重复搜索结果?
How to remove duplicate search result in elasticsearch?
首先创建一些示例数据(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"
}
首先,您需要跨多个索引进行搜索。
然后,在结果中删除重复的 ID。
POST http://myElastic.com/test/e1,e2,e3/_search
{
"aggs":{
"dedup" : {
"terms":{
"field": "id"
},
"aggs":{
"dedup_docs":{
"top_hits":{
"size":1
}
}
}
}
}
}
这可能对您有帮助:
- search multi-index type
- Remove duplicate documents from a search in Elasticsearch
- Filter elasticsearch results to contain only unique documents based on one field value
查看 Field Collapsing - 它旨在为每个“字段”提供 1 个搜索结果。
GET /test/_search
{
"collapse": {
"field": "id"
}
}
在将此功能添加到 Elasticsearch 之前,使用具有最高命中率的术语聚合是实现此目的的最佳方式。
就我而言,我也有一个术语查询
user: {
type: 'object',
properties: {
id: {
type: 'keyword', // using keyword for removing duplicate documents from searc results
normalizer: 'useLowercase',
},
name: {
type: 'text',
},
thumbnail: {
type: 'text',
},
},
},
const { body } = await elasticWrapper.client.search({
index: ElasticIndex.Payment,
body: {
from: f ? f : 0,
size: s ? s : 10,
_source: ['user'],
query: {
bool: {
must: [
{
nested: {
path: 'cart',
query: {
term: {
'cart.product.id': req.params.id,
},
},
},
},
],
},
},
collapse: {
field: 'user.id',
},
aggs: {
user_count: {
cardinality: {
field: 'user.id',
},
},
},
},
});
首先创建一些示例数据(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"
}
首先,您需要跨多个索引进行搜索。
然后,在结果中删除重复的 ID。
POST http://myElastic.com/test/e1,e2,e3/_search
{
"aggs":{
"dedup" : {
"terms":{
"field": "id"
},
"aggs":{
"dedup_docs":{
"top_hits":{
"size":1
}
}
}
}
}
}
这可能对您有帮助:
- search multi-index type
- Remove duplicate documents from a search in Elasticsearch
- Filter elasticsearch results to contain only unique documents based on one field value
查看 Field Collapsing - 它旨在为每个“字段”提供 1 个搜索结果。
GET /test/_search
{
"collapse": {
"field": "id"
}
}
在将此功能添加到 Elasticsearch 之前,使用具有最高命中率的术语聚合是实现此目的的最佳方式。
就我而言,我也有一个术语查询
user: {
type: 'object',
properties: {
id: {
type: 'keyword', // using keyword for removing duplicate documents from searc results
normalizer: 'useLowercase',
},
name: {
type: 'text',
},
thumbnail: {
type: 'text',
},
},
},
const { body } = await elasticWrapper.client.search({
index: ElasticIndex.Payment,
body: {
from: f ? f : 0,
size: s ? s : 10,
_source: ['user'],
query: {
bool: {
must: [
{
nested: {
path: 'cart',
query: {
term: {
'cart.product.id': req.params.id,
},
},
},
},
],
},
},
collapse: {
field: 'user.id',
},
aggs: {
user_count: {
cardinality: {
field: 'user.id',
},
},
},
},
});