zoukankan      html  css  js  c++  java
  • Solr 6.7学习笔记(05)-- highlighter

    搜索结果高亮显示是搜索引擎中的常用功能,在Solr中,我们可以如下配置:

    <requestHandler name="/select" class="solr.SearchHandler">
         <lst name="defaults">
           <str name="echoParams">explicit</str>
           <str name="rows">10</str>
           <str name="df">text</str>
      
           <!-- Highlighting defaults -->
           <str name="hl">true</str>
           <str name="hl.method">original</str>
           <str name="hl.fl">content filename filepath</str>
           <str name="hl.preserveMulti">true</str>
           <str name="hl.encoder">html</str>
           <str name="hl.simple.pre">&lt;b&gt;</str>
           <str name="hl.simple.post">&lt;/b&gt;</str>
           <str name="f.filename.hl.fragsize">0</str>
           <str name="f.filename.hl.alternateField">filename</str>
           <str name="f.filepath.hl.fragsize">0</str>
           <str name="f.filepath.hl.alternateField">filepath</str>
           <str name="f.content.hl.snippets">3</str>
           <str name="f.content.hl.fragsize">200</str>
           <str name="f.content.hl.alternateField">content</str>
           <str name="f.content.hl.maxAlternateFieldLength">750</str>
        
         </lst>
      </requestHandler>

    常用的一些属性:

    参数 默认值 描述
    hl false 如需启用highlighting,设置为true
    hl.method original highlighting的实现方式。有四个值可选:unified, original, fastVector, postings
    hl.fl (df=) 指定需要高亮的一些字段。字段之间用空格或逗号分隔。可以使用*号(e.g. text_*), 使用*号时,建议把hl.requireFieldMatch设为TRUE
    hl.q (q=) 高亮的查询语句,默认值等于查询语句。一般都是查询什么,结果集中就高亮什么,还没看到需要另外设置的情况
    hl.qparser (defType) hl.q的分析器
    hl.requireFieldMatch false 默认情况下,如果查询中指定了查询哪个field,但是还是会高亮所有hl.fl中指定的field。如果设置为true, 将会只高亮查询中的field。
    hl.usePhraseHighlighter true 为true时,短语做为一个整体被高亮。为false时,短语中的每个单词都会被单独高亮。
    hl.highlightMultiTerm true 为true时,高亮通配符查询
    hl.snippets 1 指定每个字段中,最多高亮的片断。
    hl.fragsize 100 返回搜索结果的最大长度。如常见的搜索引擎中,搜索结果只展示了部分文本,不可能把整篇文章都显示出来。需要点击进去才会显示全部
    hl.tag.pre <em> 如果hl.method为original,此参数应该是hl.simple.pre。此值通常是HTML或XML标签
    hl.tag.post </em> 如果hl.method为original,此参数应该是hl.simple.post。
    hl.encoder (blank) 如果为空,返回的文本不会被编码。如果设置为html,则返回的文本中如果包含html/xml的特殊字符的话,将会被转化 (e.g.  & --> &amp;)
    hl.maxAnalyzedChars 51200 高亮匹配的最大长度。如果某个文本符合搜索条件,但是搜索结果的前51200里面不包含搜索的内容,则不会继续往后去高亮匹配的内容。

    不同的hl.method,还会有不同的参数。需要用到的时候再去查询文档。

    当我们输入多个单词,希望在搜索结果里不同的单词用不同的背景色显示。在Solr的样例配置中,发现<searchComponent name="highlight">下面有一段

    <fragmentsBuilder name="colored">的配置。查看文档,发现当hl.method=fastVector时,才会有hl.fragmentsBuilder的配置。文档中也有提到,如果hl.method=original的话,只要设置f.yourTermVectorField.hl.method=fastVector,也可以使用fastVector的属性。最后更改后的设置如下:

    <requestHandler name="/select" class="solr.SearchHandler">
         <lst name="defaults">
           <str name="echoParams">explicit</str>
           <str name="rows">10</str>
           <str name="df">text</str>
      
           <!-- Highlighting defaults -->
           <str name="hl">true</str>
           <str name="hl.method">original</str>
           <str name="hl.fl">content filename</str>
           <str name="hl.preserveMulti">true</str>
           <str name="hl.encoder">html</str>
           <str name="hl.fragmentsBuilder">colored</str>
           
           <str name="f.filename.hl.fragsize">100</str>
           <str name="f.filename.hl.alternateField">filename</str>
           <str name="f.filename.hl.method">fastVector</str>
           <str name="f.content.hl.snippets">3</str>
           <str name="f.content.hl.fragsize">200</str>
           <str name="f.content.hl.alternateField">content</str>
           <str name="f.content.hl.maxAlternateFieldLength">750</str>
           <str name="f.content.hl.method">fastVector</str>
        
         </lst>
      </requestHandler>

    注意:1. 使用 fastVector的字段,四个属性(termVectors, termPositions, termOffsets, termPayloads)必须都为true,且indexed必须也是true。

               2. 另外,f.field.hl.fragsize必须设置一个>=18的数,要不然会报如下的exception:

    org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error from server at http://localhost:8983/solr/fileSearch: fragCharSize(0) is too small. It must be 18 or higher.

               3. <fragmentsBuilder name="colored"> 中配置一个 “background:lawgreen”的背景色,可是在Chrome里无法显示。导致我一开始以为是设置有问题。

  • 相关阅读:
    Leetcode:169. 多数元素
    关系数据库
    数据库系统概述——简单总结
    Leetcode:1305. 两棵二叉搜索树中的所有元素
    Leetcode春季打卡第四天:994. 腐烂的橘子
    临界区和临界资源的关系
    线程2.线程的应用场景
    线程
    linux下的进程控制
    Go中的错误处理
  • 原文地址:https://www.cnblogs.com/langfanyun/p/7474019.html
Copyright © 2011-2022 走看看