`
ldcsunnyboy
  • 浏览: 6790 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

solr 搜索短语搜索不出来的解决方案

阅读更多
先是费话,说过要经常写博客的就要坚持。

    最近学习solr,很好很强大。只是学习时间太短,很多没看明白,搭建好环境后,做好主从分布,并能做分布式搜索后,发现一个很严重的问题。就是在搜索短语时,结果很不理想。比如说
我搜“要加油呀”总是搜索不到结果,按理说是应能搜索到保护“加油”的doc才对的,使用debugQuery=on(http://localhost:8080/solr_slave1/select?q=%E8%A6%81%E5%8A%A0%E6%B2%B9&pf=f_contentt&debugQuery=on)查看只是看到了

<lst name="debug">
<str name="rawquerystring">要加油</str>
<str name="querystring">要加油</str>
<str name="parsedquery">PhraseQuery(f_content:"要 加油")</str>
<str name="parsedquery_toString">f_content:"要 加油"</str>
<lst name="explain"/>
<str name="QParser">LuceneQParser</str>

    从上面可以看出分词是分对了,只是将“要加油”转成了“要 加油”,并且solr的处理方式也算是合情合理,将“要加油”分成“要”和“加油”的短语,然后查询索引中保护了这个短语的doc,只要在一个doc中的索引字段中包含了这个词就能搜索出来,当然这中间需要设置一些参数来让solr知道他们之间差多个slop也能知道。但我们想要的分词查询应该是这样的,http://localhost:8080/solr_slave1/select?q=%E8%A6%81%20%E5%8A%A0%E6%B2%B9&debugQuery=on。
<str name="rawquerystring">要 加油</str>
<str name="querystring">要 加油</str>
<str name="parsedquery">f_content:要 f_content:加油</str>
<str name="parsedquery_toString">f_content:要 f_content:加油</str>

   因为研究solr时间不长,暂无解决方案,在网上搜了一下。说实话,网上关于solr的中文文档还真不多,很多都是简单的copy,而且没有深度的东西。

   最后从http://blog.chenlb.com/2010/08/solr-use-custom-query-parser.html 这篇博客看出了端倪。这个作者在开源搜索引擎方面还是挺有见解的。
  
   主要的解决方案就是说将PhraseQuery改为BooleanQuery,并且根据当前默然的operation来进行连接。
  
   要实现这个功能需要重写SolrQueryParser的getFieldQuery方法。为什么?上面已经说过了。因为solr的默认处理方式是将你要搜索的短语能分词分成多个同一个位置的term时会采用BooleanQuery,其他的情况大都按照MultiPhraseQuery来处理,它会将分出的词都放入到这个MultiPhraseQuery中,只有同时满足这个MultiPhraseQuery要求的索引才能被搜索出来,具体可以详看代码QueryParse.java 中第568行protected Query getFieldQuery(String field, String queryText, boolean quoted)  throws ParseException。很显然,我们中文的习惯一般情况下不能匹配这么精确,所以要采用BooleanQuery将能分割出来的词用OR的形式来处理,只要能搜索到部分,这个Doc就显示出来,这样才能得到我们想要的结果。
 
   在结合着他的代码的同时,我稍作了修改。最终算是解决了这个问题。
  
   具体步骤为
     1.继承并实现QParserPlugin中的createParser方法来调用自己的lucene查询分析器。在这个插件中要是用自己的查询分析器。这个插件是要在solrconfig中使用的。
     2.继承并重写QParser中的parse方法,来调用自己的Solr分析器。
     3.继承并重写SolrQueryParser中的getFieldQuery方法,按照自己的思路来让solr处理分词方式。
     4.将自己扩展的代码打成jar包。下面方式可以二选一。
        1)修改solrconfig.xml中的<requestHandler name="search" class="solr.SearchHandler" default="true">。这个是solr服务器默然的请求处理器。
        在<str name="echoParams">explicit</str>下面添加
        <str name="defType">extlucene</str>
       当然extlucene也需要在这个配置文件中声明。
          <queryParser name="extlucene" class="com.sfbuy.solr.search.ExtLuceneQParserPlugin"/>
        2) 直接使用request参数的形式,将http://localhost:8080/select?q=test&defType=extLucene&.........
     
       详细可参照代码
  
分享到:
评论
1 楼 qq874730504 2013-12-11  
找了好久,很有用,终于解决了。谢谢奉献!

相关推荐

    solr实现京东搜索

    Solr是Apache Lucene项目的一个子项目,是一个...从关键词搜索到分类过滤,再到价格排序和分页,Solr都能提供稳定高效的解决方案。通过不断优化和扩展,Solr能够满足电商网站日益增长的搜索需求,提供卓越的搜索体验。

    solr搜索插件

    Solr不仅支持简单的关键词查询,还包含了丰富的文本分析、排序、分面搜索、高亮显示结果等功能,使其成为大数据环境下理想的搜索解决方案。 在描述中提到,这个插件是经过个人试用并且评价为简单好用的,这意味着它...

    solr导航搜索工具+文档+配置代码

    1. 理解和使用SolrCloud:Solr的分布式解决方案,包括创建、管理和查询Collections。 2. 集成Solr到Java应用:使用SolrJ客户端库,将Solr集成到Java应用程序中,实现数据的实时索引和搜索。 3. 调优和监控:优化Solr...

    搜索引擎solr5.5

    Solr是一个开源的全文搜索引擎,被广泛应用于构建高效的、可扩展的搜索解决方案。它支持各种数据源,包括文本、图像和其他类型的数据,并能进行高级的查询、排序和过滤。以下是Solr 5.5的核心知识点: 1. **Solr...

    垂直搜索-您不知道的秘密 -solr中国-风雨V1.1

    - **Solr**、**Elasticsearch**、**Zoie**、**BoCo**等:基于Lucene开发的搜索引擎解决方案,各有特色。 - **Sphinx**:一款高性能的全文检索引擎,适用于大数据量的实时搜索。 - **Xapian**:一种高度可扩展的全文...

    Lucene全文检索框架+Solr搜索引擎(2018版.Java)

    Solr是基于Lucene构建的企业级搜索平台,提供了一套完整的搜索解决方案。Solr的优势在于其易用性、可扩展性和丰富的功能特性: 1. **Web服务接口**:Solr通过HTTP协议提供RESTful API,便于与其他系统集成,如Web...

    solr4.7.2+mmseg2.0+pinyinAnalyzer实现拼音、简拼检索

    标题 "solr4.7.2+mmseg2.0+pinyinAnalyzer实现拼音、简拼检索" 提到的是一个搜索引擎优化的解决方案,主要涉及到Apache Solr、mmseg2.0和pinyinAnalyzer这三个核心组件。这里我们将深入探讨这些概念以及它们在中文...

    solr搜索引擎

    总结,Solr搜索引擎7.3.0版本提供了全面的搜索解决方案,不仅包含基本的全文检索,还具备丰富的功能如分面导航、高亮显示、数据导入导出等。通过合理的配置和优化,可以在企业级环境中实现高效、可靠的搜索服务。

    lucene solr框架代码实例(可直接运行)

    Java领域中,Lucene和Solr是两款强大的全文搜索引擎库,为开发者提供了高效的文本搜索解决方案。本文将围绕“lucene solr框架代码实例(可直接运行)”这一主题,深入探讨Lucene和Solr的核心特性,以及如何通过它们...

    solr开发应用教程

    Solr是Apache软件基金会的一个开源项目,是一款强大的全文搜索引擎,被广泛应用于企业级搜索解决方案。在本教程中,我们将深入探讨Solr 3.5版本的开发应用,重点关注其实战应用,以帮助开发者更好地理解和利用这个...

    Solr服务器

    基于Solr搭建的服务器旨在为各种应用程序提供快速、高效的搜索功能,使其成为企业级数据搜索解决方案的理想选择。 首先,让我们深入了解一下Solr的核心特性: 1. **全文搜索**:Solr支持对文本进行复杂的模糊匹配...

    solr-4.10.3

    Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,主要用来提供全文搜索、中央索引和分布式搜索功能。...通过安装和配置这个版本的Solr,开发者可以构建出高效、可扩展的搜索解决方案。

    solr-8.0.0.tgz

    这个tgz包包含了Solr的核心组件和所有必要的文件,以便用户能够快速部署并开始使用这个高效的企业级搜索解决方案。 Solr的核心特性包括: 1. **全文检索**:Solr以其强大的文本分析能力而闻名,它支持多种语言的...

    solr和sql映射工具

    Solr和SQL映射工具是将关系型数据库中的数据与Apache Solr搜索引擎进行高效对接的解决方案。Apache Solr是一款开源的全文检索服务器,它能够快速地对大量数据进行索引和搜索,支持分布式搜索和丰富的文档处理。在...

    开源企业搜索引擎SOLR的应用教程

    本教程将深入讲解 Solr 的应用及其核心概念,帮助读者理解如何有效地使用 Solr 构建高效的企业级搜索解决方案。 1. **企业搜索引擎方案选型** 在选择企业搜索引擎时,我们需要考虑系统的可扩展性、性能、易用性...

    基于Solr的搜索引擎研究与实现

    《基于Solr的搜索引擎研究与实现》 在信息化飞速发展的今天,搜索引擎已经成为了人们获取信息、解决问题的重要工具。...在不断迭代和升级的过程中,Solr将持续为开发者提供更全面、更智能的搜索解决方案。

    solr_3.5_配置及应用

    Solr 是一个开源的全文搜索引擎,它提供了高效且可扩展的搜索和索引能力。在3.5版本中,Solr 已经成为一个成熟的技术...通过熟练掌握这些知识,开发者能够构建出高效、灵活的搜索解决方案,为用户提供优秀的搜索体验。

    lucene简单介绍及solr搭建使用

    Lucene作为底层引擎提供了强大的索引和搜索能力,而Solr则提供了企业级的解决方案,简化了部署和管理过程。对于想要搭建和使用Solr的新手,阅读“lucene的应用.pdf”以及提供的实战演练资料将是很好的学习途径。

Global site tag (gtag.js) - Google Analytics