solr按自定义评分排序

写在前面

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

背景介绍

废话不多说,下面分享下在线搜索使用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的话题,一些细节问题待后续持续讨论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容