solr长文本搜索问题

简介: 假期重新把之前在新浪博客里面的文字梳理了下,搬到这里

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

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

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

分析

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

目录
相关文章
|
5月前
文本搜索命令
文本搜索命令
40 0
|
机器学习/深度学习 数据采集 存储
ElasticSearch 之 文本搜索
ElasticSearch 之 文本搜索
193 0
|
SQL JSON 自然语言处理
白话Elasticsearch01- 结构化搜索之使用term query来搜索数据
白话Elasticsearch01- 结构化搜索之使用term query来搜索数据
295 0
|
数据采集 搜索推荐 前端开发
11、搜索服务
根据分类、关键字匹配课程名称,课程内容、难度等级搜索,搜索方式为全文搜索,搜索节点分页显示。
88 0
|
搜索推荐 安全 Java
|
存储 缓存 自然语言处理
一切为了搜索
Elasticsearch是​ 基于Lucene搜索架构的一个分布式、RESTful 风格的搜索和数据分析引擎
|
自然语言处理 索引
solr长文本搜索问题
多关键词搜索排序质量一直一个疼痛的问题,已经频繁遇到,目前还没来得及系统解决。 针对之前的解决经验,做一个小节,后面可能随着对排序质量的提高,会越来越突出。 请大家拍砖和丰富这方面的经验,提升解决需求的效率。 分析 当前默认都是phrasequery执行,对指定域先分词,然后
2465 3
|
JSON 数据格式 索引
ElasticSearch搜索实例含高亮显示及搜索的特殊字符过滤
应用说明见代码注解。1.简单搜索实例展示: public void search() throws IOException { // 自定义集群结点名称 String clusterName = "elasticsearch_pudongp...
2736 0
|
Java
elasticsearch 支持中英文搜索和混合搜索
环境: ubuntu16.04 安装: elasticsearch 5.22 1. 第一步,安装java apt-get install default-jre apt-get install default-jdk 2.
4754 0