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

如何合理的控制solr查询的命中的数量?

    博客分类:
  • Solr
阅读更多
在solr里面,如何合理的控制的命中的数量?

在一些日常的文章中或一些信息中,都有一些高频词,而这些高频词,在参与查询时,往往会造成,大量的结果集命中。
什么意思呢? 举个例子,假如我们现在做的是饭店的搜索,在我们的索引库里有一列name这个field,这里面大部分都是xxx饭店,假如你搜索的时候搜一个xxx饭店,会被分词成:
xxx
饭店
然后xxx命中只有10条结果集, 而饭店确命中了20万结果集,这么以来总结果可能就有20多万条,造成了大量的数据命中,一方面显示了信息的丰富性,另一方面可能给用户造成太多的困惑。
我们分析下在全文检索中两个重要的概念

查准率

召全率

在Lucene,Solr和ElasticSearch里面一般的分词的查询结果都会对这两个率做一个最好效果的调配,而这个默认的相关性评分规则就是:

相关性评分最高的排在前面,也就是查准的体现
相关性低的排在后面,也就是查全的体现
当然上面的结论,并不是百分百正确的,因为由于Lucene底层的设计,可能会导致一些奇怪的效果,就是最精确的没有排在最前面,这种问题大概只有10%的概率,我们可以索引两个字段,来避免这种问题,一个分词,一个不分词,查询时候,可以一起查询两个字段.

回到刚才饭店的那个问题,假如现在有想要搜索一个:
北京车道沟北里小庄十里香饭店,分词后的情况如下:

车道

北里
小庄
十里

饭店

注意,在整个索引库里面大部分要搜索的数据都含有北京和饭店两个词,所以这一下几乎会索引里面的所有数据都查询出来了,虽然查询排名还可以,但命中量太大了,超过4页之后几乎都是北京xxxx饭店了,跟主题的搜索没啥关系,所以我们可以采取一些策略来避免这种情况:
solr默认的搜索策略,是分词后的term的or的关系,最后结果集全部返回,如果我们改成and,那就是精确匹配了,但是有一点就是,如果是精确的匹配,某些时候用户输入的不完整的词就失去了全文检索的含义了,所以我们要采取一种综合的策略,既保证查准,又能保证召回,这样才能实现?

这个东西直接用我们的全文检索框架是没法实现的,有个思路不错,就是我们对要搜索的词,提取出句子的主干,然后主干部分在检索时,是必须要命中的,如果不命中,就算该条数据与查询的词,相关性不大,这个方法不错,但前提是你如何在大规模的数据里面精准的提出这些精确的主干词呢? 使用机器学习或者是文本挖掘? 答案是肯定能做,只是需要另外设计了,这是最好的解决搜索的命中数量太多的办法。

还有一个办法,是一种治标不治本的办法,比较容易实现,就是限制每次分词后最大匹配term的个数,也就是像

车道

北里
小庄
十里

饭店
必须命中3个或更多的term,我才认为相关性更大,或者有一个百分比来限制80%以上的命中,就算此条记录不错。这个使用solr的edismax可以解决,方法如下:

使用edismax,在q里写完
name:北京xxxxx饭店后
在Raw Query Paramters参数里面写
defType=edismax&mm=80%25

然后查询即可,mm是最小匹配的数量,可以是个固定的值,也可也是个百分比,因为散仙是在solr的admin页面查询,所以需要把%替换成url字符%25,这样才能正确发送到solr的服务端 具体的资料请看:

edismax函数介绍




最后欢迎大家扫码关注微信公众号:我是攻城师(woshigcs),我们一起学习,进步和交流!(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!



0
2
分享到:
评论

相关推荐

    Solr 查询,索引

    Solr查询与索引是Apache Solr的核心功能,它是一个基于Lucene的开源搜索引擎服务器,提供了高效、可扩展的全文检索、命中高亮、 faceted search(分面搜索)、拼写检查、动态集群等特性。在本文中,我们将深入探讨...

    solr查询语法.pdf

    在使用Solr进行数据查询时,必须输入查询内容,这通常通过“q”参数实现,可以使用不同的查询运算符来对搜索内容进行精确的控制。 在Solr的查询语法中,“q”参数代表查询输入,是必须的。例如,我们可以按照字段名...

    solr查询语法

    在Solr查询中,有许多重要的查询参数,这些参数可以帮助我们更精确地控制搜索行为。 1. **q**: 必填参数,代表查询字符串。它是任何Solr查询的基础,用于指定具体的查询条件。 2. **q.op**: 用来覆盖在`schema.xml`...

    基于Solr的多表join查询加速方法

    - **索引优化**:通过合理设计索引结构,如分片和副本,可以提高查询的并行处理能力,从而加速join查询。 - **查询优化**:利用Solr的查询过滤器(Filter Queries)和查询结果缓存,减少不必要的文档扫描,提高查询...

    Solr的原子更新

    利用python的pycurl对Solr进行原子更新操作

    最新springboot solr查询

    Solr是一个开源搜索平台,用于构建搜索应用程序。Solr可以和Hadoop一起使用。由于Hadoop处理大量数据,Solr帮助我们从这么大的源中找到所需的信息。不仅限于搜索,Solr也可以用于存储目的。像其他NoSQL数据库一样,...

    solrcore 添加修改控制

    合理的配置可以显著提升Solr的查询速度和整体性能。 9. **故障转移和容错** 在分布式环境中,需要考虑故障转移和容错机制。当某个节点上的SolrCore出现问题时,集群应能自动将请求路由到其他健康的节点,保证服务...

    SOLR检索调优

    SOLR 检索调优

    solr-6.2.0源码

    4. 高级搜索功能:Solr提供丰富的查询语法,如布尔逻辑、短语匹配、模糊匹配、字段限制等,以及自定义查询解析器和过滤器。 5. 自定义排序和评分:用户可以自定义文档排序规则和评分算法,以满足特定的业务需求。 6....

    solr创建索引并查询

    根据给定的查询结果示例,可以看出Solr返回了多批次的结果集,每批次包含一定数量的文档。这些文档包含了各种社会热点新闻、控诉信等内容,展示了Solr强大的全文检索能力。 - **查询性能指标**: - `QueryTime`:...

    solr查询索引

    Solr查询索引是Apache Solr的核心功能之一,它是一个基于Lucene的开源搜索服务器,提供了高效的全文检索、文档分类和聚类、拼写检查、高亮显示搜索结果等多种功能。在本文中,我们将深入探讨如何使用Solr进行索引...

    Solr configuration file

    Solr作为许多搜索引擎的构架,在许多大网站上使用,但是如何configuration文件使其能够满足solr的要求呢?请看该文件

    solr 查询应用

    Solr查询应用是Apache Lucene项目的一个开源搜索服务器,它提供了全文检索、命中高亮、 faceted search(分面搜索)、动态集群等高级功能。在本文中,我们将深入探讨Solr查询的应用及其核心特性,帮助你更好地理解和...

    java solr solrj 带账号密码增量查询添加索引

    主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询

    solr实现电商自定义打分

    接下来,我们可能需要对Solr的查询解析器进行配置,以便支持自定义的函数查询。这通常涉及到修改`schema.xml`或`managed-schema`文件,定义新的查询字段类型和查询解析器。例如,可以创建一个新的查询解析器,专门为...

    Solr项目源码及solr资源包

    - **Query**:Solr支持丰富的查询语法,包括Lucene查询语法、Solr查询API等。 8. **SolrCloud模式**:如果项目涉及到SolrCloud,那么还需要了解分布式搜索和存储的概念,如Sharding(分片)、Replication(复制)...

    Apache Solr(solr-8.11.1.zip)

    8. **搜索性能优化**:Solr提供了多种优化手段,包括使用倒排索引、缓存策略、查询优化器等,以提高查询速度和整体性能。 9. **安全与认证**:Solr 8.x引入了内置的安全性框架,包括Zookeeper的ACL和Solr的Role-...

Global site tag (gtag.js) - Google Analytics