`
qindongliang1922
  • 浏览: 2180929 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117400
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125817
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59783
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71225
社区版块
存档分类
最新评论

Lucene+Solr+ElasticSearch查询匹配优化

阅读更多

当我们在处理搜索业务时候,需求往往是灵活多变的,有时候我们需要精确匹配,有时候我们又需要全文检索,而有时候,我们又想匹配度高而且还能全文检索,这似乎是精确匹配和模糊匹配一个妥协的策略,没错这就是搜索引擎出现的目的,以往的数据库是没法解决这种问题的,数据库只能回答有,没有,存在,不存在,并不能在有和没有之间做一个完美的妥协,比如说能把最匹配最相关的结果放在topN,仅靠like模糊查询是解决不了这种问题的。


Apache Lucene这个强大的全文检索核心包,提供了搜索引擎的核心组件,通过相关性评分算法(VSM/BM25),出色的了解决了相关性匹配问题,当然Solr和ElasticSearch构建在Lucene之上,自然也继承了这种优秀的能力。

默认情况下,Lucene/Solr/ES的Boolean查询有三种查询策略:
(1)必须匹配 -> must
(2)必须不匹配 -> mustn't
(3)至少匹配一个 ->should

除此之外,对于分词字段,我们还可以通过 最小匹配查询(Minimum Should Match)来灵活控制查询策略

举个例子: 北京奇虎科技有限公司

使用IK最细粒度分词后内容:北京/奇虎/科技/有限公司/有限/有/限/公司


我们可以通过defType=edismax&mm=100%25来控制term最小命中的个数,下面来看下mm参数的详细解释:

语法一:mm=3  代表至少匹配3个term,不管总term有多少个,如果查询词分词后的term个数小于3,那么就以最小的这个term数为基准进行查询
语法二:-2    允许返回的结果里面,最多有2个不匹配term,其他的必须都匹配,这是一种反向用法
语法三:mm=75% 允许返回的结果里面,至少有75%匹配度,如果不能整除,则采取进一法来得到最小匹配个数,比如计算值=3.75,那么这个mm就等于3,如果等于0.6这个等于0
语法四:mm=-25% 反向设置,返回的结果里面最多有25%的不匹配
语法五:3<90%  如果一个字段分词后的term数,小于等于3,则要求全部匹配,如果大于3,则要求90%的匹配度
语法六:2<-25% 9<-3  小于2个term,要求全部匹配,如果是3-9个要求100%-25%=75%匹配,如果大于9个,则最多允许有3个不匹配term出现


情景1:查询北京奇虎+mm=3 能查询到北京奇虎科技有限公司
情景2:查询北京奇虎360+mm=3 不能查询到北京奇虎科技有限公司
情景3:查询北京奇虎360+mm=2 能查询到北京奇虎科技有限公司
情景4:查询北京奇虎360+mm=80%(3*80%=2.4=2) 能查询到北京奇虎科技有限公司
情景5:查询北京奇虎360+mm=-10%((3-3*0.1(减一法等0))=3)不能查询到北京奇虎科技有限公司


总结:

对于分词后term数少的,适合采用固定数进行查询限制优化查询
对于分词后term数多的,适合采用百分比进行查询限制优化
mm=0% 代表最少匹配查询词里面出现的任意一个term
mm=100% 代表必须匹配查询词里面所有出现的term

大家可在自己的场景中,不断反复测试,以找到合适的阈值,从而避免查询结果集过大,有太多不相关的数据或者查询结果集偏小漏掉一些相关的数据。


参考资料:
https://cwiki.apache.org/confluence/display/solr/The+DisMax+Query+Parser#TheDisMaxQueryParser-Themm(MinimumShouldMatch)Parameter
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html


有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。


0
2
分享到:
评论

相关推荐

    Solr Elasticsearch lucene 搜索引擎

    Solr、Elasticsearch和Lucene是三个在搜索引擎领域中至关重要的技术,它们共同构建了现代数据检索的基础架构。下面将分别对这三个组件进行详细解释,并探讨它们之间的关系。 **Lucene** Lucene是一个高性能、全文本...

    基于Java语言的搜索引擎设计源码:深入Lucene、Solr、Elasticsearch实践

    该项目为基于Java语言的搜索引擎设计源码,综合运用了Lucene、Solr、Elasticsearch等关键技术,共包含54个文件,包括15个Java源文件、11个XML配置文件、5个Git忽略文件、3个属性文件等多种类型。该项目旨在深入实践...

    搜索引擎 Lucene、Solr

    5. Solr是一个基于Lucene构建的企业级搜索服务器,它提供了搜索引擎的索引、搜索、排序等功能,并通过RESTful API与各种客户端进行交互。Solr在实现搜索引擎方面,不仅继承了Lucene的强大功能,还提供了分布式搜索、...

    开发自己的搜索引擎--Lucene+Heritrix.zip

    例如,通过Solr或Elasticsearch这样的Lucene派生产品,可以轻松实现集群部署和负载均衡。 总之,结合Apache Lucene和Heritrix,我们可以构建一个高效、可扩展的搜索引擎,实现从网页抓取到内容检索的全过程。这不仅...

    lucene+nutch搜索引擎开发源码1

    7. Lucenechapter7可能涉及Lucene的分布式搜索,如何利用Solr或Elasticsearch扩展Lucene的集群能力。 8. LuceneChapter1可能是对Lucene的整体介绍,包括历史背景、设计原则和架构概述。 9. Lucenechapter9可能探讨了...

    Lucene+nutch开发自己的搜索引擎 part2

    6. **与Solr或Elasticsearch集成**:Nutch抓取的网页数据可以导入到Solr或Elasticsearch中,提供更高级的搜索功能和界面。 在《Lucene+nutch开发自己的搜索引擎 part2》中,作者通过实例详细讲解了如何使用Lucene...

    Lucene全文检索框架+Solr+ElasticSearch搜索引擎(Java高级必备.ES)

    课程提供所有代码笔记素材...2、ElasticSearch下载安装(window以及linux下安装) 3、集群环境搭建 4、客户端Kibana安装与使用 5、集群管理插件head安装使用 6、java api 操作 ES 7、电商项目实战应用等等 .....

    es与solr的区别_solr_ES_es与solr的区别_elasticsearch_

    在大数据和搜索引擎领域,Elasticsearch (ES) 和 Apache Solr 都是广泛使用的开源技术,它们都基于 Lucene 库,提供高性能、可扩展的全文搜索和分析能力。然而,两者在设计哲学、使用场景、功能特性以及社区支持等...

    Lucene+in+action中文版-含目

    5. **分布式搜索**:当数据量增大时,单机Lucene可能无法满足需求,这时需要了解如何使用Solr或Elasticsearch(基于Lucene)进行分布式搜索。 6. **定制化**:Lucene允许开发者自定义分析器、过滤器和评分函数,以...

    中文搜索分词lucene包+paoding包

    - **扩展性**:随着数据量的增长,可能需要考虑分布式索引和搜索,这可以通过Lucene的分布式解决方案如Solr或Elasticsearch来实现。 - **错误处理和日志记录**:在处理大量数据时,应确保有良好的错误处理机制,...

    jcseg,Jcseg 是基于 mmseg 算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于 Jetty 的 web 服务器,方便各大语言直接 http 调用,同时提供了最新版本的 lucene, solr, elasticsearch 的分词接口!.zip

    lucene, solr, elasticsearch 的分词接口!Jcseg自带了一个 jcseg.properties 文件用于快速配置而得到适合不同场合的分词应用,例如:最大匹配词长,是否开启中文人名识别,是否追加拼音,是否追加同义词等!

    Lucene+原理与代码分析完整版

    对于大规模数据,Lucene提供Solr或Elasticsearch这样的扩展框架,它们支持分布式索引和搜索,能够处理PB级别的数据。 8. **代码分析** 通过对Lucene源代码的研究,我们可以更深入地了解其内部机制,例如如何...

    面试题:Lucene、Solr、ElasticSearch.docx

    图文并茂吃透面试题,看完这个,吊打面试官,拿高薪offer!

    ES和solr搜索方案对比

    ES(ElasticSearch)和Solr都是基于Lucene的搜索引擎,它们各自提供了一套搜索框架,用于实现高效的全文搜索功能。由于两者都是在Apache License 2下开源的,因此在选择使用哪种搜索方案时,需要根据不同的使用场景...

    一个专业搜索公司关于lucene+solar资料(1)

    - 利用Solr、Elasticsearch等分布式搜索引擎。 - 分布式架构可以有效提高系统的扩展性和可用性。 **6.6 本章小结** - 本章详细介绍了如何使用Lucene创建和管理索引库,包括索引库的设计、创建...

    搜索引擎选择: Elasticsearch与Solr - 叽歪.pdf

    在搜索引擎领域,Elasticsearch与Solr是两款被广泛使用且具有代表性的开源全文搜索引擎。它们都基于Apache Lucene构建,提供了强大的搜索引擎功能。在进行搜索引擎选择时,对比Elasticsearch与Solr可以帮助我们更好...

    ElasticSearch分享ppt40页+.pptx

    【ElasticSearch】是基于Apache Lucene构建的开源、分布式搜索分析引擎,主要针对文本、数字、地理以及结构化和非结构化数据提供强大的搜索功能。它的特点是具有简单的REST API、分布式架构、高效率和可扩展性。...

    lucene相关jar+查询分析器jar

    7. **Lucene的扩展性**:除了基本功能,Lucene还提供了一些扩展模块,如Solr和Elasticsearch,它们提供了更高级的服务,如分布式搜索、实时索引、多租户支持等。 总结,"lucene相关jar+查询分析器jar"是一个包含了...

    lucene-solr-talk:我在 JUG Karlsruhe 演讲的示例代码

    Lucene、Solr 和 Elasticsearch 的演示应用程序 该存储库包含我用于讨论 、 和的示例代码。 它由一个子项目 lucene 组成,其中包含使用 Lucene 进行索引和搜索的逻辑。 子项目 solr-indexer 用于索引正在运行的 Solr...

Global site tag (gtag.js) - Google Analytics