搜索结果高亮显示是搜索引擎中的常用功能,在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里无法显示。导致我一开始以为是设置有问题。

Solr 6.7学习笔记(05)-- highlighter的更多相关文章

  1. 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归

    机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...

  2. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) -- 样例(6)

    managed-schema 样例: <?xml version="1.0" encoding="UTF-8" ?> <!-- License ...

  3. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(3)

         5. <fieldType> fieldType主要定义了一些字段类型,其name属性值用于前面<field>中的type属性的值.e.g. <fieldTyp ...

  4. Solr 6.7学习笔记(04)-- Suggest

    当我们使用baidu或者Google时,你输入很少的字符,就会自动跳出来一些建议选项,在Solr里,我们称之为Suggest,在solrconfig.xml里做一些简单的配置,即可实现这一功能.配置如 ...

  5. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - filter(5)

    自定义fieldType时,通常还会用到filter.filter必须跟在tokenizer或其它filter之后.如: <fieldType> <analyzer> < ...

  6. C++ GUI Qt4学习笔记05

    C++ GUI Qt4学习笔记05   qtc++正则表达式 QIntValidator           --  只让用户输入整数 QDoubleValidator     --  只让用户输入浮 ...

  7. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(1)

    刚学Solr(版本6.7.0),新建一个core时,提示要求schema.xml文件,我找了半天也没在源码包中找到名为schema.xml的文件.这个版本其实用的是managed-schema文件,没 ...

  8. [Golang学习笔记] 05 程序实体2 作用域访问权限和变量重声明

    作用域访问权限: 程序实体访问权限(作用域)有三种:1. 包级私有(代码包)2. 模块级私有(代码包)3. 公开(全域). 一个函数是一个代码块.一个程序实体的作用域总是会被限制在某个代码块中.好处: ...

  9. stm32寄存器版学习笔记05 PWM

    STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟 ...

  10. [原创]java WEB学习笔记05:Servlet中的ServletConfig对象

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

随机推荐

  1. git版本控制-- Windows+Git+TortoiseGit+COPSSH安装图文教程

    Windows+Git+TortoiseGit+COPSSH 安装图文教程 教程网址: http://www.liaoxuefeng.com/wiki/0013739516305929606dd183 ...

  2. Android Development Note-01

    Eclipse快捷键: 导包:ctrl+alt+o 格式化代码:ctrl+alt+f   MVC: M——Model V——View C——Control   android程序界面如何设计.调试 U ...

  3. Cocoapods的安装以及使用

    在网上看博客,看了好多次,都没有学会cocoapods,今天上午浪费了一上午的时间,终于算是学会了.其实也是很简单的. iOS 新版 CocoaPods 安装流程 1.换掉现有Ruby默认源(由于好多 ...

  4. TopCoder SRM420 Div1 RedIsGood —— 期望

    题目链接:https://vjudge.net/problem/TopCoder-9915 (论文上的题) 题解: 更正:, i>0, j>0 代码如下: #include <ios ...

  5. Zookeeper原理与Curator使用

    近期打算实现一个基于Zookeeper的分布式的集群状态一致性控制, 对Zookeeper的原理不太了解, 正好学习一下, 网上找到了几篇文章, 先贴在这边, 等我熟读官方文档后, 再来补充自己的见解 ...

  6. X-Forward-For ip

    用 Firefox 的Moify Headers 插件 服务器重新配置X-Forward-For 为正确的值. 如对典型的nginx + php fastcgi 环境( nginx 与 php fas ...

  7. Linux_服务器_06_VMware虚拟机下安装CentOS7.0图文教程

    二.参考资料 1.VMware虚拟机下安装CentOS7.0图文教程

  8. erlang的map基本使用

    maps 适用于需要在运行时改变数据结构(record则不行)的场景,可以动态增加key 数据量不宜过大,具体多大没有实际数据, maps from_list  如果list表很长,则相应的耗时时间会 ...

  9. kmp算法模板及理解

    kmp算法是复杂度为O(n+m)的字符串匹配算法; 首先kmp算法的核心是在模式串中获得next数组,这个数组表示模式串的子串的前缀和后缀相同的最长长度; 这样在匹配的过程中如果指到不匹配的位置,模式 ...

  10. k8s-部署WEB-UI(dashboard)

    [root@k8s-master dashboard]# pwd/usr/local/src/kubernetes/cluster/addons/dashboard [root@k8s-master ...