solr长文本搜索问题

简介: 多关键词搜索排序质量一直一个疼痛的问题,已经频繁遇到,目前还没来得及系统解决。 针对之前的解决经验,做一个小节,后面可能随着对排序质量的提高,会越来越突出。 请大家拍砖和丰富这方面的经验,提升解决需求的效率。 分析 当前默认都是phrasequery执行,对指定域先分词,然后

多关键词搜索排序质量一直一个疼痛的问题,已经频繁遇到,目前还没来得及系统解决。


针对之前的解决经验,做一个小节,后面可能随着对排序质量的提高,会越来越突出。


请大家拍砖和丰富这方面的经验,提升解决需求的效率。


分析


当前默认都是phrasequery执行,对指定域先分词,然后按照短语去查询,当出现分词交叉后,结果就悲剧了。


当非自动生成phrasequery时候,指定域也会分词,然后按照
AND 
或者 OR

拼接起来去查,此时,短语的关联性丢失,挨在一起的可能没有排在前面,尽管有结果。


当不自动生成phrasequery时候,"  " 
将查询出当做整体,此时依然会分词,只是查询时分词后的拼接去查。例如 交易成功 
转为 交易

成功


当扩展查询串去查,可能结果来自扩展串,有结果但不一定就是期望。


改为 
建索引最多分词、查询最长匹配,能解压一部分场景需求,对于精准查询的短语、长文本尤其效果好,对于追求结果最多不适应。


或者 
业务执行分词然后按照业务需求执行坡度或者相关性激励来调整相关性。例如 (交易

成功)~12 And

交易^10

成功^2

 


总结:


新业务依赖长文本查询的,需要daily仔细测试,对多关键词的抽样测试不可少。

    

新的对精准匹配要求高的检验使用IK分词,分别配置建索引和查询的分词模式。

    
DismaxQueryparse
 
能有效的减少查询IO和“去重“,完全可以替代
OR 
扩展查询,目前发现一个不友好,例如 
“成功页面 
交易成功”,这个串中“成功”分量非常大,导致


结果排序有点糟糕。

    
Dismaqueryparse
覆盖lucenequeryparse全部功能,同时提供更丰富的查询相关性设置, 
分词内部关系式OR

,一定能保证有结果,


配饰使用方法,在solrconfig.xml  requesthandler

中配置 edismax

Phrasequery 
不启用,一种方法是schema
verison
定义为1.4就可以了,另外是
fieldtype中显示定义不生成,同时solrconfig中配置lucene 
版本34


问题背景


使用paoding分词,默认AND 
autogeneralPhrasequery
= true


搜“交易成功 
幻灯片” 
没有结果       --AND之后幻灯片部分没有结果导致没有结果


搜“交易成功” 
有结果 


搜“幻灯片” 
没有结果----》原因是分词交叉

 


使用paoding分词,autogeneralPhrasequery = false


搜“交易成功 
幻灯片” 
有结果        

结果来自交易成功部分


搜“交易成功”        有结果


搜“幻灯片”          没有结果      

交叉依然没有结果

 


使用paoding分词,autogeneralPhrasequery = false  扩展OR


搜“交易成功 
幻灯片” 
扩展为 
“交易成功 
幻灯片” OR  交易成功

幻灯片    有结果,结果排序严重受关键词、索引影响


搜“交易成功”        扩展为“交易成功”
OR   

交易成功   有结果
  多余IO出现了


搜“幻灯片”          扩展为“幻灯片”
  OR
 


幻灯片   有结果  

结果排序与期望相差很远,排在一起的没在前面

相关文章
hutool工具随机获得列表中的一定量的不重复元素,返回Set
hutool工具随机获得列表中的一定量的不重复元素,返回Set
hutool工具随机获得列表中的一定量的不重复元素,返回Set
|
JSON Kubernetes 算法
Cobra 命令自动补全指北
本篇文章就来讲讲如何使用 Cobra 来实现命令自动补全。
4276 0
|
4月前
|
存储 弹性计算 人工智能
2026年阿里云服务器价格表及活动报价、租用收费标准参考
阿里云服务器租用体系涵盖轻量应用服务器、ECS云服务器两大核心品类,专注满足通用建站、企业办公、高性能计算等多元需求,收费受实例类型、配置规格、计费方式及地域影响显著。同时推出全场景优惠活动,包括普惠降价、新人秒杀、新老同享福利及长期套餐折扣,部分活动有明确时效限制。
813 7
|
9月前
|
存储 算法 Java
求数组中的最大值和最小值
本文介绍了在程序中如何查找数组中的最大值和最小值,重点讲解了两种算法:普通算法和分治算法。普通算法通过遍历数组直接比较元素大小,找出最值;而分治算法则通过递归将数组划分成更小的部分,分别找出各部分的最大值,最终合并结果得到整个数组的最大值。文章以 {3,7,2,1} 为例,详细演示了两种算法的实现过程,并提供了 C、Java 和 Python 的代码示例。
641 0
阿里云服务器带宽价格参考:选择1M、3M、5M、10M宽带价格解析
阿里云服务器1M、3M、5M、10M宽带需要多少钱?单说阿里云服务器宽带多少钱,而不确定云服务器实例规格及cpu和内存配置的话,是没办法具体说多少钱的,因为云服务器的价格受很多因素影响。本文将详细解析阿里云服务器在选择1M、3M、5M、10M不同带宽下的价格差异,以供大家参考。
阿里云服务器带宽价格参考:选择1M、3M、5M、10M宽带价格解析
|
人工智能 自然语言处理 搜索推荐
GLM-Realtime:智谱推出多模态交互AI模型,融入清唱功能,支持视频和语音交互
GLM-Realtime 是智谱推出的端到端多模态模型,具备低延迟的视频理解与语音交互能力,支持清唱功能、2分钟内容记忆及灵活调用外部工具,适用于多种智能场景。
912 4
GLM-Realtime:智谱推出多模态交互AI模型,融入清唱功能,支持视频和语音交互
|
IDE 数据中心 Docker
使用PyCharm与Docker容器进行开发:从入门到精通
使用PyCharm与Docker容器进行开发:从入门到精通
4601 0
|
编译器
ProtoBuf的安装
ProtoBuf的安装
385 0
|
存储 索引
【数据结构】图的存储结构—邻接表
【数据结构】图的存储结构—邻接表
1842 0
【数据结构】图的存储结构—邻接表
|
存储 Java 对象存储
阿里云开通OSS存储服务详细流程
阿里云开通OSS存储服务详细流程
阿里云开通OSS存储服务详细流程