Solr的查询结果去重

2019-05-16  本文已影响0人  Ombres

先说一下背景,由于业务需要,之前的旧版本的SolrCloud搜索业务需要针对某个字段进行查询结果去重,自然而然就想到了Solr自带的两种分组功能。

Group

Group将具有公共字段值的文档进行分组,并返回每个组的顶部文档(可以指定排序)。但是最终的结果是展示在grouped这个结果集中。

Collapsing/Expand

Collapsing 和 Expand 组件结合起来,可以在 Solr 搜索结果中根据指定字段折叠,从而对文档分组去重的效果。
Collapsing常规用法是写在fq中,最简单的启用方式如下示例:

fq={!collapse field=group_field }

SolrCloud使用Collapsing结果不准确

原因

Collapsing功能是在每个shard搜索上进行折叠,但是在最终汇总结果时并没有再次按照相应的折叠方式进行合并,导致可能出现的情况就是同一个分组出现多次。

解决方法

在索引数据时使用路由,使用折叠字段作为路由字段,这样就可以把具有相同值的文档索引到同一个分片(但是这样也有坏处,可能会导致索引数据分布不均,海量数据下影响不大)。

使用路由的方法

在创建collection时使用以下两个参数

router.name影响文件如何在shard之间的分配规则
只有当router.name设置为implicit时,可以使用router.field参数指定使用文档中的哪个字段进行路由分配。

上一篇下一篇

猜你喜欢

热点阅读