阿斯顿阿斯顿 发表于 2015-8-1 13:53:22

Apache Solr3.4应用实践(高亮 拼写检查 匹配相似)

  Solr 是基于lucene的检索服务器。能够很快的搭建检索服务,并且提供的很多实用的组件。例如高亮(highlight)、拼写检查(spellCheck)和匹配相位(moreLikeThis)。下面我将在我工作中接触到的一些实践与大家分享。(我当前使用的solr 版本是 3.4,使用tomcat 7.0.21)
(如果你也使用的是 tomcat 服务器,而且查询请求包含中文的话,还需要修改 TOMCAT_HOME/conf/server.xml 的使用 UTF-8 编码,详见 URI_Charset_Config 和 http)
高亮(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代码





   
    0
    15
      
      true
      name
      name:王麻子
      0
      10
      
   
   
   
      
      4
      王麻子勤劳朴实
      
   
   
   
      
      
      
         
         
      <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=&hl.simple.post=。或者修改 solrconfig.xml 配置文件中的 highligh searchComponent 来实现。
(highlight 更多请求参数可以参考HighlightingParameters)

拼写检查(spellCheck)


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




   
    default
      
    name
      
    spellchecker
      
      
    true
   


   
   
    false
    false
      
    1
   
   
    spellcheck
   

  
  配置完之后,需要重新建遍索引才能失效。然后我们这以请求 http://localhost:8080/solr/spell?q=name:王麻字&spellcheck=true
查询如果如下:

  Xml代码




   
      
      0
      0
      
      
      
      
         
          1
          0
          3
            
            王麻子
            
         
      
      
   
  
有时候我们需要以多个字段为依据进行拼写检查,但上面的配置只能设一个字段。为了达到同样的效果,我能只能另行其道了。需要用到 coptyField 技术。比如我们在 schema.xml 中定义了
  Xml代码



   

  
想对字段 a 和 b 同时为依据进行拼写检查,我们可能再加一个 field
  Xml代码




  
然后再加两个 copyField
  Xml代码
  



   

  
完整的配置如下:
  Xml代码



   


   

  
(更详细的内容可以参考 SpellCheckComponent)

匹配相似(moreLikeThis)


  他的作用是查找相似的document。
首先在 solrconfig.xml 中配置 MoreLikeThisHandler
  Xml代码





  
然后我就可以请求 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 才有效果
  Xml代码




  
当然 mlt.fl 也可以添加多个field ,用逗号隔开就行了
(详细说明可参考 MoreLikeThis MoreLikeThisHandler)
  
页: [1]
查看完整版本: Apache Solr3.4应用实践(高亮 拼写检查 匹配相似)