`
bastengao
  • 浏览: 149173 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

solr3.4 高亮(highlight),拼写检查(spellCheck),匹配相似(moreLikeThis) 应用实践

阅读更多
Solr 是基于lucene的检索服务器。能够很快的搭建检索服务,并且提供的很多实用的组件。例如 高亮(highlight)、拼写检查(spellCheck)和匹配相位(moreLikeThis)。下面我将在我工作中接触到的一些实践与大家分享。(我当前使用的solr 版本是 3.4,使用tomcat 7.0.21)

(如果你也使用的是 tomcat 服务器,而且查询请求包含中文的话,还需要 修改 TOMCAT_HOME/conf/server.xml 的 <Connector ... URIEncoding="UTF-8"/> 使用 UTF-8 编码,详见 URI_Charset_Confighttp)

高亮(highlight)
我们经常使用搜索引擎,比如在google 搜索 java ,会出现如下结果,结果中与关键字匹配的地方是红色显示与其他内容区别开来。




solr 默认已经配置了highlight 组件(详见 SOLR_HOME/conf/sorlconfig.xml)。通常我出只需要这样请求 http://localhost:8080/solr/select?q=name:王麻子&start=0&rows=10&hl=true&hl.fl=name ,可以看到与比一般的请求多了两个参数 "hl=true" 和 "hl.fl=name" 。"hl=true" 则是开启高亮,"hl.fl=name" 则告诉solr 对 name 字段进行高亮(如果你想对多个字段进行高亮,可以继续添加字段,字段间用逗号隔开,如 "hl.fl=name,name2,name3")。
查询结果如下:
<?xml version="1.0" encoding="UTF-8"?>
<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">15</int>
    <lst name="params">
      <str name="hl">true</str>
      <str name="hl.fl">name</str>
      <str name="q">name:王麻子</str>
      <str name="start">0</str>
      <str name="rows">10</str>
    </lst>
  </lst>
  <!--此处是一般的返回结果-->
  <result name="response" numFound="1" start="0">
    <doc>
      <str name="id">4</str>
      <str name="name">王麻子勤劳朴实</str>
    </doc>
  </result>
  <!--此处是高亮的返回结果-->
  <lst name="highlighting">
    <!--id=4-->
    <lst name="4"> 
      <!--字段name 的高亮内容-->
      <arr name="name"> 
        <!--下面是经过xml转义,其实内容是 "<em>王麻子</em>勤劳朴实"-->
        <str>&lt;em&gt;王麻子&lt;/em&gt;勤劳朴实</str>
      </arr>
    </lst>
  </lst>
</response>


高亮内容与关键匹配的地方,默认将会被 "<em>" 和 "</em>" 包围。如果用户想自定义高亮地方的前后标签,可以在请求中再加两个参数 "hl.simple.pre" 和 "hl.simple.post" 来分别指定前后标签,如 http://localhost:8080/solr/select?q=name:王麻子&start=0&rows=10&hl=true&hl.fl=name&hl.simple.pre=<b>&hl.simple.post=</b>。或者修改 solrconfig.xml 配置文件中的 highligh searchComponent 来实现。
(highlight 更多请求参数可以参考HighlightingParameters)


拼写检查(spellCheck)

首先配置 solrconfig.xml,文件可能已经有这两个元素(如果没有添加即可),需要根据我们自己的系统环境做些适当的修改。

  <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
    <lst name="spellchecker">
      <str name="name">default</str>
      <!--这里指明需要根据哪个字段的索引为依据进行拼写检查。现配置 名为 name 的字段-->
      <str name="field">name</str>
      <!--拼写检查索引的目录-->
      <str name="spellcheckIndexDir">spellchecker</str>
      <!--当commit的时候,对拼写检查索引进行构建。(只有构建后,拼写检查才有效果)-->
      <!--当然,也可以选择在optimize的时候,进行构建。那么只需要将"buildOnCommint"换为 "buildOnOptimize"-->
      <str name="buildOnCommit">true</str>
    </lst>
  </searchComponent>

  <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
    <!--默认参数-->
    <lst name="defaults">
      <str name="spellcheck.onlyMorePopular">false</str>
      <str name="spellcheck.extendedResults">false</str>
      <!--配置拼写检查提示结果的个数(可以根据需要适当加大)-->
      <str name="spellcheck.count">1</str>
    </lst>
    <arr name="last-components">
      <str>spellcheck</str>
    </arr>
  </requestHandler>


配置完之后,需要重新建遍索引才能有效。然后我们这以请求 http://localhost:8080/solr/spell?q=name:王麻字&spellcheck=true
查询如果如下:
<?xml version="1.0" encoding="UTF-8"?>
  <response>
    <lst name="responseHeader">
      <int name="status">0</int>
      <int name="QTime">0</int>
    </lst>
    <result name="response" numFound="0" start="0"/>
    <lst name="spellcheck">
      <lst name="suggestions">
        <lst name="王麻字">
          <int name="numFound">1</int>
          <int name="startOffset">0</int>
          <int name="endOffset">3</int>
          <arr name="suggestion">
            <str>王麻子</str>
          </arr>
        </lst>
      </lst>
    </lst>
  </response>


有时候我们需要以多个字段为依据进行拼写检查,但上面的配置只能设一个字段。为了达到同样的效果,我能只能另行其道了。需要用到 coptyField 技术。比如我们在 schema.xml 中定义了
<field name="a" .../> 
<field name="b" .../>
想对 字段 a 和 b 同时为依据进行拼写检查,我们可能再加一个 field
<field name="ab" multiValued="true" .../>
  然后再加两个 copyField
<copyField source="a" dest="ab" /> 
<copyField source="b" dest="ab" />

完整的配置如下:
<field name="a" .../> 
<field name="b" .../>
<field name="ab" multiValued="true" .../>
<copyField source="a" dest="ab" /> 
<copyField source="b" dest="ab" />

然后配置 SpellCheckComponent 的字段为 ab 即可。
(更详细的内容可以参考 SpellCheckComponent)


匹配相似(moreLikeThis)
他的作用是查找相似的document。

首先在 solrconfig.xml 中配置 MoreLikeThisHandler
<requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
</requestHandler>

然后我就可以请求 http://localhost:8080/solr/mlt?q=id:7&mlt.true&mlt.fl=name&mlt.mintf=1&mlt.mindf=1
上面请求的意思 查找 id 为 7 的 document ,然后返回与此 document 在 name 字段上相似的其他 document。需要注意的是 mlt.fl 中的 field 的 termVector=true 才有效果
<field name="name" termVector="true" .../>

当然 mlt.fl 也可以添加多个field ,用逗号隔开就行了
(详细说明可参考 MoreLikeThis MoreLikeThisHandler)
  • 大小: 28.1 KB
2
1
分享到:
评论

相关推荐

    solr 3.4 中文分词配置问题

    博文链接:https://kinkabrain.iteye.com/blog/1236668

    SOLR的应用教程

    3.6.5 Solr高亮使用 46 4 SolrJ的用法 46 4.1 搜索接口的调用实例 46 4.2 Solrj的使用说明 47 4.2.1 Adding Data to Solr 47 4.2.2 Directly adding POJOs to Solr 49 4.2.3 Reading Data from Solr 51 4.3 创建查询...

    solr查询语法.pdf

    排序 / 高亮 / facet / spellcheck:拼写检查 / spatial:空间搜索 / 检索运算符:

    solr开发应用教程

    Solr 3.5开发应用教程,偏实战

    solr.war包solr.war包solr.war包solr.war包solr.war包

    solr.warsolr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包...

    相关性搜索利用Solr与Elasticsearch创建智能应用

    资源名称:相关性搜索 利用Solr与Elasticsearch创建智能应用内容简介:《相关性搜索:利用Solr与Elasticsearch创建智能应用》揭开了相关性搜索的神秘面纱,告诉大家如何将 Elasticsearch与 Solr这样的搜索引擎作为可...

    solr3.5配置及应用

    初学者学习solr时,可以借助此文档入门,学习solr

    solr5.4.0完整包

    Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的,Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的...

    solr服务器_solr_

    solr

    apache solr1.3.0所有最新开发包及源码及文档

    组件包括现有的功能如faceting(多侧面搜索),同时添加More Like This(更多类似的), Editorial Boosting (Query Elevation查询扩展) 和Spell Checking(拼写检查)。 ——为了更容易索引数据库内容到Solr,建立...

    企业级搜索应用服务器solr

    solr 入门 及中文分词器安装与应用

    solr_3.5_配置及应用

    solr_3.5_配置及应用

    Solr in Action(1.2.3.4.5.6.8.11章可用)

    Solr in Action version 6 PART 1:MEET SOLR 1 Introduction to Solr – FREE 2 Getting to know Solr – AVAILABLE 3 Key Solr concepts – AVAILABLE 4 Configuring Solr – AVAILABLE 5 Indexing – AVAILABLE 6...

    solr高级应用高亮显示高级搜索

    本课程全程使用目前比较流行的开发工具idea进行开发,涉及到目前互联网项目中最常用的高并发解决方案技术, 如 dubbo,redis,solr,freemarker,activeMQ,springBoot框架,微信支付,nginx负载均衡,电商活动秒杀,spring...

    Solr高亮查询案例-附件资源

    Solr高亮查询案例-附件资源

    Solr权威指南-上卷

    本书作者是国内较早接触Solr的技术专家之一,多年一直在Solr的研究、实践和布道的路上不遗余力、乐此不彼。本书立足全球视野,综合Solr技术的发展和应用、从业人员的学习曲线,以及中英文资料的供给情况,给自己设定...

    Solr 3.5开发应用教程.pdf

    Apache Solr 是一个开源的搜索服务器,Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache ...定制 Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述所有 Field 及其内容的 XML 文档就可以了。

    solr

    solr

    java进阶Solr从基础到实战

    在本套课程中,我们将全面的讲解Solr,从Solr基础到Solr高级,再到项目实战,基本上涵盖了Solr中所有的知识点。 主讲内容 章节一:Solr基础(上) 1. 环境搭建 2. 核心讲解 3. 数据导入 4. 各种中文分析器 章节二:...

    Solr技术培训资料(基础知识+高级应用)。

    这是我整理的关于Solr的技术培训资料,它包含了关于Solr的基础知识和高级应用,例如分组、分词器、权重等问题,因为本人在学习solr时发现资源太少,所以整理了一些,当然由于本人技术不足,难免知识点不够全面,有...

Global site tag (gtag.js) - Google Analytics