美文网首页solr
solr按自定义评分排序

solr按自定义评分排序

作者: DickH | 来源:发表于2016-09-15 15:03 被阅读1384次

写在前面

第一次在简书写博客,一方面是想记录下自己技术学习之路,另一方面将自己的认知提出来与大家沟通交流。

背景介绍

废话不多说,下面分享下在线搜索使用solr的一些调研经验和遇到的坑。

首先说明下,之所以用solr做在线搜索是因为项目组之前有过使用经验,主要是用于日志检索,用的比较简单。但从调研业界的做法来看,Elasticsearch更适合做在线实时搜索,实时搜索的效率是solr的几十倍,到solr也有自己的优势这里不多说,后面补充。

做的产品是新闻客户端。搜索的需求一开始是标题匹配优先,其次文章内容匹配,结果分别按时间倒排。要求模糊匹配,准确度80%(这个匹配度是从产品层面定义,可简单理解为:搜索词是10个字,匹配上8个字才认为匹配上)。

索引

首先做检索肯定需要对需要匹配的字段做索引。在配置文件中设置title和content属性indexed=true,索引的意义不用多说,相当于空间换搜索时间的概念。

分词器

这里介绍下分词器。搜索引擎不可能拿用户输入的词直接去做匹配,所以就需要做分词,目前solr支持的最好的开源分词器是IKAnalyzer(中文分词器)。比如“王宝强和马蓉离婚事件”,理想的分词结果应该是“王宝强”、“和”、“马蓉”、“离婚”、“事件”。如果你认为“和”这个词是无意义影响匹配效果,可在stopword.doc中配置这个词,那么搜索时就会被过滤。(其实IK做不到这样的分词效果,目前应该是哈工大的分词器效果比较理想能做到这样的效果,可用c语言封装so库提供java调用)。

自定义评分

要实现上面的需求最大的难度是需要自定义打分规则,而不是根据匹配度。solr提供了一些函数来改变打分。首先要设置defType为edismax,edismax是boost函数与原score相乘作为打分结果,dismax是相加,一般自定义打分都设置为edismax,因为score是其中一个维度(匹配度)。打分函数是设置bf字段,函数就是 query product exists等solr函数根据自定义规则计算一个打分结果的函数。将计算结果*score,搜索结果按这个最终打分来排。另外还有个参数mm,来控制匹配度,如80%,表示必须分词结果的所有词去匹配,需要80%的词匹配上。

效果分析

按以上策略满足了产品需求,但实际效果比较差,因为自定义评分函数结果对score影响较大,搜索结果前面几条可能匹配度不是最高的,但也满足了80%,有匹配度更高的没有出现在前面。这里就需要对自定义评分函数的参数不断调优,达到一个合理的值。事实上最终我们放弃了这个自定义评分的方案,产品最终一方面是希望按匹配度来排序,另一方面要求匹配的精确度高。最后我们将mm值设为了100%。

结语

在不是必要的前提下,尽量不要使用自定义评分函数,因为会影响打分结果。如果一定要使用,那么需要优化好自定义评分的函数,达到你预期的搜索效果。

这里仅仅是用一个使用实例来抛出了使用solr的话题,一些细节问题待后续持续讨论。

相关文章

  • solr按自定义评分排序

    写在前面 第一次在简书写博客,一方面是想记录下自己技术学习之路,另一方面将自己的认知提出来与大家沟通交流。 背景介...

  • 学习office——Excel 排序与筛选

    一、排序 1、多条件排序使用自定义排序 2、按颜色排序 使用自定义排序 3、工资条 复制表头——下拉复制更多表头—...

  • sunspot+solr搜索的自定义排序

    近来由于系统需要个性化的排序搜索结果,所以研究了一下solr的排序,发现solr支持在排序中使用函数对字段进行处理...

  • django 自定义排序

    今天遇到个自定义排序场景 按 status 不规则排序平时只用到 order_by("status") 或 ord...

  • Sql 分组自定义排序

    1、实现效果 使用去重或分组,数据库默认按字符排序,特定场景下需自定义排序原本思路,先去重,再联表保证自定义顺序改...

  • python requests headers自定义问题

    requests库默认的headers有自己的排序规则,假如我们需要完全按自己的规则自定义排序,可: header...

  • 排序

    1.sort方法 python内置了sort方法,可以很方便地对某个list进行排序 2.自定义排序(例如,按关键...

  • 【读书】EXCEL三大招:排序筛选和分列

    一、排序 排序可以按【数值】高到低、低到高;【日期】近到远、远到近;【颜色】单元格颜色、字体颜色;还可以【自定义】...

  • 电商网站 - 需求

    页面应该自动化:主页应该按顺序展现;类别页面也应该按顺序展现; solr删除应该单独开发一个接口; solr集群 ...

  • Python 数据处理(十一)—— 排序

    11 排序 pandas 支持三种排序方式: 按索引排序 按指定列的值排序 按索引和列排序 11.1 按索引排序 ...

网友评论

    本文标题:solr按自定义评分排序

    本文链接:https://www.haomeiwen.com/subject/bqebettx.html