Solr是否内置支持高亮片段highlight snippets相关性排序功能?
Solr高匹配度高亮片段筛选的原生能力说明
Solr没有提供开箱即用的内置功能,直接实现“从全量高亮结果中自动筛选匹配度最高的2-3个片段”的需求,你可以根据实际业务场景,通过参数组合或者二次开发达成目标:
单文档单字段维度取TopN高匹配片段
如果你的筛选范围是单个文档的单个字段内部,取匹配度最高的2-3个片段,可以组合配置以下原生参数实现:
- 将
hl.snippets设置为你最终需要的片段数量,比如要3个就设为3 - 开启
hl.score.snippets=true,该参数生效后,Solr不会再按照片段在原文中的出现顺序返回结果,而是会先给每个候选片段计算和查询条件的相关性得分,按得分降序排列后取前N个(N为hl.snippets的配置值)返回 - 根据业务字段的实际长度调大
hl.maxAnalyzedChars值,这个参数默认只会读取字段内容的前51200个字符生成高亮片段,超出部分不会进入候选池,很容易漏掉长文本尾部的高匹配片段
跨文档/跨字段维度取全局TopN高匹配片段
如果你的筛选范围是所有命中查询的文档、所有高亮字段的全量片段,要从中选出全局匹配度最高的2-3个,Solr完全没有对应原生能力支持,必须在业务层做二次处理:
- 先把
hl.snippets设为足够大的数值,保证每个文档、每个字段的所有候选高亮片段都能正常返回 - 拿到Solr返回结果后,自定义打分规则(参考维度包括命中查询词的数量、命中词的自身权重、命中词之间的相邻程度等)给所有片段计算匹配分
- 对所有片段按得分排序,截取符合数量要求的结果即可
踩坑提示:默认配置下
hl.snippets的截断逻辑不是“生成全量片段再取前N个”,Solr会按原文顺序扫描内容,凑够hl.snippets设置的片段数就直接停止扫描剩余文本,这种场景下返回的片段大概率不包含匹配度最高的结果。
内容的提问来源于stack exchange,提问作者feder
相关产品推荐
相关产品推荐

