1、 collapse
collapse
可以将搜索结果按照指定的 field
去重。如果在一次 DSL query
中,collapse
和 sort
同时存在时,DSL
的执行顺序是 select -> collapse -> sort
。
2、 使用场景
根据关键词搜索 spu_id
, 但文档是 SKU
,根据 SKU
的名称关键词搜索 spu_id
。一个 SPU
通常都有多个 SKU
,如果不对 spu_id
进行去重,那么 spu_id
将会有很多的重复。
DSL demo
{
"query": {
"match": {
"desc": "搜索"
}
},
"from": 0,
"size": 4,
"collapse": {
"field": "spu_id"
},
"_source": {
"includes": [
"spu_id"
]
}
}
response
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 18,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "xxx",
"_type": "_doc",
"_id": "xxx",
"_score": 19.782768,
"_routing": "xxx",
"_source": {
"spu_id": xxx
},
"fields": {
"spu_id": [
"xxx"
]
}
},
{
"_index": "xxx",
"_type": "_doc",
"_id": "xxx",
"_score": 18.0652,
"_routing": "xxx",
"_source": {
"spu_id": xxx
},
"fields": {
"spu_id": [
"xxx"
]
}
}
]
}
}
3、 collapse 的优缺点
优点:性能明显
缺点
分页查询时不知道去重后的 spu_id 的总数;
不能和 scroll 组合进行分页查询;