[img]http://dl2.iteye.com/upload/attachment/0118/2222/133a7e24-46e8-3060-9018-bfe45e2381cd.jpg[/img]

[size=medium]
最近收集的两个搜索的case,如下:

案例一:

使用 A关键词:“中国诚通控股公司”搜索,不能搜到 B结果“中国诚通控股集团有限公司”

从关键词字面上看,确实不应该出现这种问题,因为A的关键词完全被B包含,如果说搜索B,搜不到A到还可以接受,因为
在关键词越长的情况下,term之间是AND的关系,这样返回结果集就越少,这一点从Google或者其他电商的搜索都可以得到测试确认,

看到这种问题,一般情况下,都跟分词有关系,然后拿到Solr中,

先使用IK最细粒度分词测试两个关键词的分词结果如下:[/size]

[img]http://dl2.iteye.com/upload/attachment/0118/2214/d62b10c6-9d06-3022-9fab-522011d1a947.png[/img]

[size=medium]
再使用Ansj索引分词测试两个关键词的分词结果如下:[/size]

[img]http://dl2.iteye.com/upload/attachment/0118/2216/6695bf10-1a72-3ec4-8c51-1b1a96e506f1.png[/img]

[size=medium]
从上面可以看出差异,A里面有个完整的term:控股公司,B里面没有,
如果按照AND关系的匹配,意思是:A里面出现的每一个term,在B里面都必须能找到 这样的逻辑走下去
A搜不到B是正常的。

中文分词的问题,一般是由词库引起的,那么如何解决上面的问题呢?

(1)改词库:
去掉控股公司这个关键词,这样A的分词结果里面不会出现控股公司这个关键词,而只有控股+公司
这样以来A完全被B包含,可以正常搜索,但是这样做的话,就意味着,所有这样非最小属性的关键词都要被去掉,才能
保证最大限度不会这种类似的问题,改词库后还需要重建索引,变动比较大,而且比较不灵活。

(2)改匹配方式:
有人说AND关系不行,那就OR呗,没错,用OR确实可以搜索出来,但是,这样以来无论搜什么,
搜索结果命中数量就会变的异常巨大,尤其是在关键词越长,总数据量大的情况下,对用户体验和搜索性能都不是
最好的选择。这时才会发现无论你怎么改,都有引发一些新的问题,所以搜索引擎对中文检索来说,如果能保证90%的搜索效果是最优的,
就已经是非常不错的结果了,下面接着谈:

既然AND+OR+修改词库的方式,都不太理想,那么我们采取一种折中的方式,来优化查询结果呢? 答案是肯定的,Lucene/Solr/ElasticSearch有一种
按照term匹配个数,来优化查询结果的方式,并且可以限制不同个数的采取不同的匹配方式,散仙在前面的文章,也分析过,这里不在详细展开,
有兴趣可以访问 [url]http://qindongliang.iteye.com/blog/2302483[/url] 地址,查看此文章。这里大概描述下处理思路:

对于短文本关键词分词后term个数小于3的,我们采用精确匹配
对于中文本关键词分词后term个数大于3小于9的,我们乐观模式的缺减匹配,至多允许一个词不一致
对于长文本关键词分词后term个数大于10的,我们悲观模式的缺减匹配,至少允许一个词不一致

尽量保证在查准和召全之间的得到一个平衡,当然这需要不断调试,探索,改进才能得出来,并非泛泛而谈。

案例二:

业务定义,有限公司和有限责任公司应该是相同的意思,搜索的时候,可互相搜索出来,比如

搜A:小米科技有限公司 要求能搜到 小米科技有限责任公司
搜B:小米科技有限责任公司 要求能搜到 小米科技有限公司

有人说这很简单,直接把有限公司和有限责任公司作为同义词映射不就行了,这是一种办法,然而依旧解决不了这种问题。

why? 同义词映射应用在精确查询的字段上,没有啥问题,但现在要求映射在分词字段上,而且,有限公司和有限责任公司并不是不可再分的
属性了,他们还可以切分更细粒度的关键词,我们在solr中,看下他们的分词效果:
[/size]

[img]http://dl2.iteye.com/upload/attachment/0118/2218/86307e67-9f61-36d1-8c8c-73819b2e1009.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0118/2220/32cc2efd-5914-31e4-8b3a-6152e8284933.png[/img]

[size=medium]
从上面的截图中,可以看出,在匹配方式,设置为AND的时候,从A可以搜到B,但反过来就不行了,B是搜不到A的,
因为他们还可以再切分,如何解决?

这种情况下改词库也解决不了,你不可能将有限公司和有限责任公司保留,而细粒度的关键词去掉,这样的话,召全率就会出现问题

比较好的解决办法是:
(1) 匹配方式更改,正如案例一种的场景,我们可以允许term中,有1到2个term词不匹配,这样的话,就可以互相搜到,但是可能
在召全率上提升,查准率上有所下降,因为他们本来就是相生相克的关系,一个率升高,另一个率必然下降。

(2)进行数据归一化处理,我们知道在英文搜索中,一个单词可能有单数形式,复数形式,现在时,过去时等等等等,搜索引擎不关注你的七十二变,
只需要归一化到最原始的状态,然后索引起来,在搜索时候同样归一化,这样以来,无论你有多少种变化方式,在搜索引擎看来,就有只有一种原始
状态,把复杂的问题简单化,然后操作,是不错的一种处理方式,反映到这个例子中,我们可以使用同样的办法,比如有限责任公司,在索引和搜索的时候
统一归一化成有限公司检索,这样既能保证查全也保证了查准,当然需要我们额外做的,就是在数据规则上多下点功夫,然后不断完善我们的搜索系统。

总结:
文章简单剖析了,上面两种case造成的原因以及和他们的一些解决方法,当然这只是众多的问题中的几个例子,此外,任何一类问题的解决,都会可能引起新的问题,所以我们还是要具体问题,具体分析,能简单解决,就不要使用复杂的策略,更不要南辕北辙,忘了初心。

[/size]
[b][color=green][size=large]
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。
[/size][/color][/b]
[img]http://dl2.iteye.com/upload/attachment/0104/9948/3214000f-5633-3c17-a3d7-83ebda9aebff.jpg[/img]

Lucene/Solr/ElasticSearch搜索问题案例分析相关推荐

  1. 公司技术分享-全文技术分享Lucene VS ElasticSearch VS Solr

    全文检索 前言: 目前,我们最常使用的是关系型数据库进行数据的存储,数据库中的搜索很容易实现,通常都是使用sql语句进行 查询,而且能很快的得到查询结果.模型图如下: 但随着业务的复杂性,原有的关系型 ...

  2. 2021年大数据ELK(四):Lucene的美文搜索案例

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 美文搜索案例 一.需求 二.准备工作 1.创建IDEA项目 2. ...

  3. 全文搜索!收藏这篇Solr ElasticSearch 长文就可以搞定

    转载自  全文搜索!收藏这篇Solr ElasticSearch 长文就可以搞定 摘自:JaJian`博кē Java后端技术编者说:文章从浅到深,描述了什么是全文搜索,为什么要使用全文搜索,Solr ...

  4. ElasticSearch实现商品搜索与聚合分析

    ElasticSearch实现商品搜索与聚合分析 Gitee地址:https://gitee.com/yuyuuyuy/micro-mall 文章目录 ElasticSearch实现商品搜索与聚合分析 ...

  5. java全文搜索服务器 solr_Apache Solr采用Java开发、基于Lucene的全文搜索服务器

    http://docs.spring.io/spring-data/solr/ 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Java开发.基于Luc ...

  6. 全文搜索技术 Lucene solr es (二)Solr(7.7.1)

    学习视频地址:https://www.bilibili.com/video/av45567492?from=search&seid=14848044148453483902 本篇博客是基于此学 ...

  7. 聚合中返回source_大数据搜索与可视化分析(9)elasticsearch聚合分析Metric Aggregation...

    在上一篇文章中,我们介绍了<大数据搜索与可视化分析(8)kibana入门教程-2-Discover>,本文学习elasticsearch聚合分析,是对<大数据搜索与可视化分析(3)e ...

  8. 消费者洞察案例分析_情绪搜索洞察定时器案例研究

    消费者洞察案例分析 We're in the midst of a worldwide pandemic and could all use a few moments of peace. Enter ...

  9. solr简单搜索案例

    solr简单搜索案例 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类.价格过滤搜索结果,也可以根据价格进行排序,实现分页. 架构分为: 1. solr服务器 2. ...

  10. 【南京Meetup】华泰证券Elasticsearch在日志搜索、日志分析、链路管理系统方面的应用实践...

    2018Elastic Meetup南京交流会,由华泰证券李文强带来以"华泰证券Elasticsearch应用实践"为题的演讲.本文首先介绍了华泰证券具有系统运维繁琐.日志不能长期 ...

最新文章

  1. ios(iphone/ipad)一个简单的用代码判断当前设备的方法
  2. Corrigendum: A window into third generation sequencing
  3. 来来来,你可能没见过这么全的实战吧
  4. 在Centos中安装aria2c
  5. 离散数学范式c语言实验报告,离散数学实验报告-利用真值表法求主析取范式及主合取范式的实现...
  6. 【Android 逆向】代码调试器开发 ( ptrace 函数 | 读取进程内存数据 )
  7. Portlet开发指南第二章
  8. dw中HTML修改背景图片,dreamweaver将一个图片设定背景,用代码怎么写?
  9. CSS 两栏布局之总体设计
  10. MPLS 次末跳弹出配置_weblogic的安装与配置
  11. Android UI设计之十一自定义ViewGroup,打造通用的关闭键盘小控件ImeObser
  12. 超好用的富文本编辑器froalaEditor(方便传图片和视频等)
  13. iOS swift 2048小游戏开发教程(一)
  14. NB-IOT技术与发展问答
  15. [转]多媒体范例: 如何使用CSS来格式化TLF文本
  16. 移动端H5页面编辑器开发实战--经验技巧篇
  17. yaffs2文件系统结构及应用
  18. wow转服务器微信支付,魔兽打团本成就,打到一半,发微信支付宝要钱,真国服之耻!...
  19. C++ 算术基本定理
  20. Python的学习(十八)---- 单元测试工具nose

热门文章

  1. CheckboxPreference 改造
  2. Report Machine 在WIN7系统下 IE里面运行错误
  3. tl494cn逆变器电路图_用TL494制作的逆变电源
  4. 看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了
  5. 博客园怎样在Markdown编辑模式下调整图片大小(已解决)
  6. 传说中的世界500强面试题-数学能力(2)
  7. Chrome浏览器安装IE_Tab
  8. 【计算机基础】防火墙
  9. 为什么要进行TracePro模拟?
  10. 学李炎恢老师的PHP第一季 笔记 多用户留言系统-TestGuest0.2