一个使用高亮特性的非显而易见的方法,实际上是不做任何高亮。Solr的高亮能用来提醒用户返回文档中的哪个字段满足搜索,而不是真的去做高亮。在这种场景下,会做一个跨field或在all字段上的search,同时hl.fl(the highlighted field list)被设为*。当然根据fields的不同也会混用多种方法。
highlighting例子:加上hl=true。
http://localhost:8983/solr/select?indent=on&q=corgan&rows=3&qt=mb_
artists&hl=true
And here is the output of the above URL:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">89</int>
</lst>
<result name="response" numFound="5" start="0">
<doc>
<date name="a_begin_date">1967-03-17T05:00:00Z</date>
<str name="a_name">Billy Corgan</str>
<date name="a_release_date_latest">
2005-06-21T04:00:00Z</date>
<str name="a_type">1</str>
<str name="id">Artist:102693</str>
<str name="type">Artist</str>
</doc>
<doc>
<str name="a_name">Billy Corgan & Mike Garson</str>
<str name="a_type">2</str>
<str name="id">Artist:84909</str>
<str name="type">Artist</str>
</doc>
<doc>
<arr name="a_member_id"><str>102693</str></arr>
<arr name="a_member_name"><str>Billy Corgan</str></arr>
<str name="a_name">Starchildren</str>
<str name="id">Artist:35656</str>
<str name="type">Artist</str>
</doc>
</result>
<lst name="highlighting">
<lst name="Artist:102693">
<arr name="a_name">
<str>Billy <em>Corgan</em></str>
</arr>
</lst>
<lst name="Artist:84909">
<arr name="a_name">
<str>Billy <em>Corgan</em> & Mike Garson</str>
</arr>
</lst>
<lst name="Artist:35656">
<arr name="a_member_name">
<str>Billy <em>Corgan</em></str>
</arr>
</lst>
</lst>
</response>
例子中应该注意的是返回数据中的高亮返回结果。也可注意一下不是所有的结果高亮是基于相同的field。
【可能启用高亮后发现一些结果里没有高亮。有时是因为复杂的文本处理,更有可能的是查询字段与高亮字段的误匹配。】
高亮的配置
高亮组件有很多配置的参数。就像facet搜索参数的配置,几乎所有的参数值能被基于单个字段参数值所覆盖。语法是 f.fieldName.paramName=value,如f.allText.snippets=0。
【即使有这么多的选项,别被吓着了,像Solr中的大多数的配置,默认值给得很合理的。只需要参数hl,就能启用高亮功能。你可能会设置hl.fl,并且启用hl.usePhraseHighlighter和hl.highlightMultiTerm和其它等的值以满足你自己的想法】
参数详细说明:
hl.fl: 用空格或逗号隔开的字段列表。要启用某个字段的highlight功能,就得保证该字段在schema中是stored。如果该参数未被给出,那么就会高亮默认字段 standard handler会用df参数,dismax字段用qf参数。你可以使用星号去方便的高亮所有字段。如果你使用了通配符,那么要考虑启用hl.requiredFieldMatch选项。
hl.requireFieldMatch:
如果置为true,除非该字段的查询结果不为空才会被高亮。它的默认值是false,意味着它可能匹配某个字段却高亮一个不同的字段。如果hl.fl使用了通配符,那么就要启用该参数。尽管如此,如果你的查询是all字段(可能是使用copy-field 指令),那么还是把它设为false,这样搜索结果能表明哪个字段的查询文本未被找到
hl.usePhraseHighlighter:
如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。
hl.highlightMultiTerm
如果使用通配符和模糊搜索,那么会确保与通配符匹配的term会高亮。默认为false,同时hl.usePhraseHighlighter要为true。
hl.snippets:
这是highlighted片段的最大数。默认值为1,也几乎不会修改。如果某个特定的字段的该值被置为0(如f.allText.hl.snippets=0),这就表明该字段被禁用高亮了。你可能在hl.fl=*时会这么用。
hl.fragsize:
每个snippet返回的最大字符数。默认是100.如果为0,那么该字段不会被fragmented且整个字段的值会被返回。大字段时不会这么做。
hl.mergeContiguous:
如果被置为true,当snippet重叠时会merge起来。
hl.maxAnalyzedChars:
会搜索高亮的最大字符,默认值为51200,如果你想禁用,设为-1
hl.alternateField:
如果没有生成snippet(没有terms 匹配),那么使用另一个字段值作为返回。
hl.maxAlternateFieldLength:
如果hl.alternateField启用,则有时需要制定alternateField的最大字符长度,默认0是即没有限制。所以合理的值是应该为hl.snippets * hl.fragsize这样返回结果的大小就能保持一致。
hl.formatter:一个提供可替换的formatting算法的扩展点。默认值是simple,这是目前仅有的选项。显然这不够用,你可以看看org.apache.solr.highlight.HtmlFormatter.java 和 solrconfig.xml中highlighting元素是如何配置的。
注意在不论原文中被高亮了什么值的情况下,如预先已存在的em tags,也不会被转义,所以在有时会导致假的高亮。
hl.fragmenter:
这个是solr制定fragment算法的扩展点。gap是默认值。regex是另一种选项,这种选项指明highlight的边界由一个正则表达式确定。这是一种非典型的高级选项。为了知道默认设置和fragmenters (and formatters)是如何配置的,可以看看solrconfig.xml中的highlight段。
regex 的fragmenter有如下选项:
hl.regex.pattern:正则表达式的pattern
hl.regex.slop:这是hl.fragsize能变化以适应正则表达式的因子。默认值是0.6,意思是如果hl.fragsize=100那么fragment的大小会从40-160.
分享到:
相关推荐
- Solr的关键组件:如Solr核心(Solr core)、请求处理器(request handlers)、查询解析器(query parsers)等。 - 选择Solr的理由:探讨了为什么在当前的技术背景下,特别是在面对社交媒体、云计算、移动应用和...
此外,Solr还提供了高亮显示、排序、 faceting(分面导航)等功能,以提升用户体验。查询结果可以通过Solr的Response Writers以不同格式返回,如JSON、XML等。 5. **其他** 可能还有其他未涵盖的内容,比如...
Solr 1.4 为企业提供了多种高级搜索特性,如分面导航(faceted navigation)、结果高亮(result highlighting)、模糊查询(fuzzy queries)、排序评分(ranked scoring)等。 #### 二、分面导航(Faceted Navigation) 分...
5. **查询解析器**:Solr 提供多种查询解析器,可以解析用户输入的查询字符串,转换为可执行的查询表达式。 二、Solr 运行环境与部署 1. **Jetty 和 Tomcat**:Solr 可以嵌入在 Jetty 或 Tomcat 等 servlet 容器中...
- 利用机器翻译技术实现不同语言之间的搜索。 - 可以提高多语言环境下的搜索效果。 **5.11 本章小结** - 本章详细介绍了自然语言处理技术在搜索引擎中的应用,包括中文分词、关键词提取、自动摘要等多个方面。 ...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...