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

SOLR拼写检查相关

 
阅读更多
6.8相似匹配

  在我们使用网页搜索时,会注意到每一个结果都包含一个 “相似页面” 链接,单击该链接,就会发布另一个搜索请求,查找出与起初结果类似的文档。Solr 使用 MoreLikeThisComponent(MLT)和 MoreLikeThisHandler 实现了一样的功能。如上所述,MLT 是与标准 SolrRequestHandler 集成在一起的;MoreLikeThisHandler 与 MLT 结合在一起,并添加了一些其他选项,但它要求发布一个单一的请求。我将着重讲述 MLT,因为使用它的可能性更大一些。幸运的是,不需要任何设置就可以查询它,所以您现在就可以开始查询。

  MLT 要求字段被储存或使用检索词向量,检索词向量以一种以文档为中心的方式储存信息。MLT 通过文档的内容来计算文档中关键词语,然后使用原始查询词语和这些新词语创建一个新的查询。提交新查询就会返回其他查询结果。所有这些都可以用检索词向量来完成:只需将 termVectors="true" 添加到 schema.xml 中的 <field> 声明。

MoreLikeThisComponent 参数:

参数

 说明

  值域

mlt

在查询时,打开/关闭 MoreLikeThisComponent 的布尔值。

true|false

mlt.count

可选。每一个结果要检索的相似文档数。          

> 0

mlt.fl  

用于创建 MLT 查询的字段。               

任何被储存的或含有检索词向量的字段。

mlt.maxqt

可选。查询词语的最大数量。由于长文档可能会有很多关键词语,这样 MLT 查询可能会很大,从而导致反应缓慢或可怕的   TooManyClausesException,该参数只保留关键的词语。

> 0

要想使用匹配相似首先在 solrconfig.xml 中配置 MoreLikeThisHandler 

         

   
   

<requestHandler     name="/mlt" class="solr.MoreLikeThisHandler">  
    </requestHandler>

   
   
 

然后我就可以请求

http://localhost:8983/skyCore/mlt?q=id%3A6F398CCD-2DE0-D3B1-9DD6-D4E532FFC531&mlt.true&mlt.fl=content&wt=xml&indent=true

上面请求的意思查找 id 为 6F398CCD-2DE0-D3B1-9DD6-D4E532FFC531 的 document ,然后返回与此 document 在 name 字段上相似的其他 document。需要注意的是 mlt.fl 中的 field 的 termVector=true 才有效果  

         

   
   

<field     name="content" type="text_smartcn"     indexed="false" stored="true"     multiValued="false" termVector="true"/>

   
   

 

使用SolrJ时也同样加入参数就可以

            

   
   

SolrQuery  query     = new SolrQuery();

   

query.set("qt", "/mlt");

   

query.set("mlt.fl","content");

   

query.set("fl", "id,");

   

query.set("q", "id: 6F398CCD-2DE0-D3B1-9DD6-D4E532FFC531");

   

query.setStart(0);

   

query.setRows(5);

   

QueryResponse      rsp = server.query(query);

   

SolrDocumentList list = rsp.getResults();

   
   

 

6.9拼音检索

       拼音检索中国人的专用检索,例如:中文内容为 中国 的输入zhongguo、zg、zhonggu 全拼、简拼、拼音的相邻的一部份都应该能检索出 中国 来。

       想要实现拼音检索第一个就是拼音转换我这里用的是pinyin4j进行拼音转换。第二个就是N-Gram的题目,推敲到用户可能输入的既不是前缀也不是后缀,所以此处选择的是N-Gram技巧,但不同于常用的N-Gram,我应用的从一边开端的单向的N-Gram,Solr里的实现叫EdgeNGramTokenFilter,但是分的分的太细了,不需要这么复杂EdgeNGramTokenFilter,也就是说我们用的N-Gram不同于传统的N-Gram。

        同样的例子使用EdgeNGramTokenFilter从前往后取2-Gram的结果是zh, 一般是取min–max之间的所有gram,所以使用EdgeNGramTokenFilter取2-20的gram结果就是zh,zho, zhon, zhong, zhongg, zhonggu, zhongguo, 从这个例子也不难理解为什么我要选择使用EdgeNGramTokenFilter而非一般意义上的N-Gram, 考虑到用户可能输入的不是前缀而是后缀,所以为了照顾这些用户,我选择了从前往后和从后往前使用了两次EdgeNGramTokenFilter,这样不只是前缀、后缀,二十任意的字串都考虑进去了,所以大幅度的提高了搜索体验.

       现在思路明确了我们把它结合到Solr中,为了方便使用现在写了两个Filter进行处理拼音分词问题一个是拼音转换Filter(PinyinTransformTokenFilter)一个是拼音N-Gram的Filter(PinyinNGramTokenFilter),这样一来使用时就不用在添加索引前做拦音的转换了。而且PinyinTransformTokenFilter还有个好处就是它只使用中文分词器分过的词,也就是说做转换的词都是有用的不重复的,不会对没用的停词类的做拼音转换和重复拼音转换,这样大大的提高了拼音转换速度。

       想要Solr支持拼音检索就要先把拼音分词(PinyinAnalyzer)的jar复制到\solr\contrib\analysis-extras\lib下,然后在schema.xml中配置一个拼音字段类型:

   

         

   
   

<fieldType name="text_pinyin"     class="solr.TextField" positionIncrementGap="0">

   

      <analyzer type="index">

   

          <tokenizer     class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>

   

          <filter     class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>

   

         <filter     class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory"     minTermLenght="2" />

   

<filter     class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory"     minGram="1" maxGram="20" />

   

          </analyzer>

   

   <analyzer type="query">

   

                 <tokenizer class="solr.WhitespaceTokenizerFactory"/>

   

                        <filter class="solr.LowerCaseFilterFactory"/>

   

          </analyzer>

   

        </fieldType>

   
   

 

minTermLenght:最小中文词长度,意思是小于这个值的中文词不会做拼音转换。

minGram:最小拼音切分长度。
如果想使用简拼的话在拼音转换Filter 使用这个参数isFirstChar="true"就可以了

分享到:
评论
1 楼 夜行侠 2016-08-31  
基于微博数据检测的Solr实战开发
课程观看地址:http://www.xuetuwuyou.com/course/145
课程出自学途无忧网:http://www.xuetuwuyou.com


solrcloud5.2.1+zookeeper一部精通
课程观看地址:http://www.xuetuwuyou.com/course/15

相关推荐

    Apache Solr(solr-8.11.1.tgz)

    同时,你可以利用Solr的 faceting(分面搜索)、highlighting(高亮显示)、spell checking(拼写检查)等功能来提高用户体验。此外,Solr还支持实时添加和更新文档,以及高效的近实时搜索。 在部署和使用Solr时,...

    solr-4.10.3.rar

    它提供了全文检索、命中高亮、拼写检查、缓存、近实时搜索等特性,广泛应用于网站内容搜索、电子商务产品搜索等领域。本次分享的资源是Solr的4.10.3版本。 Solr 4.10.3是一个稳定版本,它包含了之前版本的所有修复...

    solr 笔记

    通过对Solr客户端的初始化、查询及拼写检查等功能的实现,以及对业务逻辑的封装,为用户提供了一个高效且准确的搜索体验。同时,通过依赖注入、配置参数读取等机制,保证了代码的可维护性和扩展性。

    solr入门java工程

    Solr的核心功能是提供高效的全文检索、命中高亮、拼写检查、分类、 faceting(分面导航)和更多其他高级功能。它基于Lucene库,提供了更易用的API和配置方式,使得开发者可以快速搭建搜索引擎。 华为FusionInsight ...

    solr4.9.0.zip

    9. **拼写纠错**:Solr内置了拼写检查功能,当用户输入错误的关键词时,系统可以提供正确的建议。 10. **地理空间搜索**:Solr支持地理空间搜索,可以基于地理位置进行范围查询和距离排序。 11. **XML/JSON API**...

    Solr需要的jar

    这些jar包在特定场景下会发挥重要作用,例如solr-clustering.jar提供了集群和导航功能,solr-spellcheck.jar支持拼写检查。 对于描述中提到的"版本统一",这意味着所有的jar包应为同一版本的Solr发布。这是因为不同...

    solr-7.1.0.zip solr搜索引擎安装包

    Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,主要提供高速、可扩展的全文检索、命中高亮、拼写检查、查询分析等功能,广泛应用于企业级搜索应用。它基于Java语言开发,使用Lucene库作为其核心搜索...

    solr7官方文档

    - "搜索" 部分则提供了对 Solr 搜索功能的全面介绍,包括搜索语法、JSON 请求 API、分面搜索、高亮显示、拼写检查等。 - "文档、字段和模式设计" 详细介绍了 Solr 中的文档结构、字段类型以及如何定义模式等高级主题...

    solr相关的jar包

    Solr是Apache Lucene项目下的一个企业级搜索服务器,它提供了全文检索、命中高亮、拼写检查、分类、 faceting、实时添加文档等高级功能。在Java环境中使用Solr,通常需要引入一系列的jar包来支持Solr的客户端操作。...

    solr-7.5.0.zip

    5. **Spell Checking(拼写检查)**:Solr内置了拼写检查器,能自动纠正用户的搜索输入,提高搜索命中率。 6. **XML/JSON等多格式支持**:Solr支持多种数据导入方式,如XML、CSV、JSON等,方便不同来源的数据集成。...

    Apache Solr(solr-7.7.3.tgz)

    它提供了高效、可扩展的全文检索、命中高亮、拼写检查、分类、 faceting、实时索引和多语言支持等特性。在商业环境中,Solr常用于构建企业级搜索解决方案,使用户能够快速、准确地搜索大量数据。 Solr-7.7.3是Solr...

    ik-analyzer-solr7.zip

    Solr是Apache软件基金会的一个项目,它是一款强大的全文搜索服务器,提供了诸如索引、搜索、高亮显示、拼写检查等多种功能。对于处理中文文档,一个合适的中文分词器是必不可少的,IKAnalyzer就是这样一个解决方案。...

    solr7.5官方文档

    文档中介绍了 Solr 的拼写检查功能,包括如何配置拼写检查器、如何使用拼写建议等。 #### 查询重排序 文档中探讨了如何根据特定条件对搜索结果进行重新排序,以提供更相关的搜索结果。 #### 结果文档的转换 文档...

    asp.net调用Solr

    此外,Solr还支持实时更新、分页、排序、高亮显示搜索结果、拼写检查和建议等功能。在ASP.NET中,你可以根据需求利用这些特性来定制你的搜索体验。 为了处理更复杂的情况,比如批量导入数据到Solr,你可以使用...

    solr demo

    同时,你还可以学习如何使用Solr的API来实现高级搜索特性,如 faceting(分面搜索)、highlighting(高亮显示)和spell checking(拼写检查)。 通过这个"solr demo",你不仅能够掌握Solr的基本操作,还能深入理解...

    apache-solr-dataimportscheduler-1.0.zip_official54l_solr 5.x定时生成

    Apache Solr是一个流行的开源搜索引擎,它提供全文搜索、命中高亮、拼写建议等功能,广泛应用于网站内容管理和企业级信息检索。在Solr 5.x版本中,为了实现数据的定时更新,用户需要借助特定的扩展来实现定时生成...

    tomcat下部署solr

    Solr使得在大量数据中进行全文搜索、近似搜索、拼写检查以及多种其他高级功能变得简单。Tomcat是Java Servlet容器,常用于部署Java web应用程序。 在部署Solr于Tomcat之前,我们需要以下步骤: 1. **下载与准备**...

    solr-5.5.5 linux安装包

    Solr-5.5.5还支持多种特性,如实时索引、多字段搜索、高亮显示、 faceted search(分面搜索)、拼写检查等,这些都极大地增强了其在大数据环境下的搜索和分析能力。此外,Solr的分布式特性使其能够轻松扩展,适应高...

    solr4.9与tomcat8,tomcat7整合

    Apache Solr 是一个开源的搜索平台,它提供了全文检索、高亮显示、拼写建议等功能。在Solr 4.9版本中,可以与Jetty或Tomcat这样的Servlet容器进行集成,以实现更灵活的部署。 1. **Solr 4.9与Jetty的直接运行** - ...

Global site tag (gtag.js) - Google Analytics