博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
solr长文本搜索问题
阅读量:6273 次
发布时间:2019-06-22

本文共 1315 字,大约阅读时间需要 4 分钟。

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

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

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

分析

当前默认都是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
 “
幻灯片”   有结果  
结果排序与期望相差很远,排在一起的没在前面

转载地址:http://nlmpa.baihongyu.com/

你可能感兴趣的文章
10.28 rsync工具介绍 10.29/10.30 rsync常用选项 10.31 rsync通过ssh同步
查看>>
使用Layer弹窗时遇到Layer.Close()后dom元素延迟性销毁的问题 @Gyb
查看>>
LVS DR +keepalived配置
查看>>
安装redis.msi 及启动命令
查看>>
k8s集群部署四(部署Flannel网络)
查看>>
C4C和Outlook的集成
查看>>
人脸检测,人脸识别,机器学习库Dlib在VS2015上的详细安装教程,示例运行
查看>>
数组——冒泡排序算法
查看>>
微信H5支付坑一--手续费未结算
查看>>
Spring Cloud Alibaba发布第二个版本,Spring 发来贺电
查看>>
Netty 备录 (一)
查看>>
netfilter 五个表五个链介绍,iptables案例
查看>>
Ubuntu服务器界面认识及创建用户
查看>>
网站如何防止sql注入攻击
查看>>
【TeeChart .NET教程】(四)轴控制
查看>>
关于SBR3U30P1-7你必须知道的
查看>>
Linux防火墙-firewalled
查看>>
爬虫获取网页,出现乱码问题
查看>>
再有人问你Java内存模型是什么,就把这篇文章发给他
查看>>
控制台程序隐藏方法总结(四种)
查看>>