solr

关键字: solr 高亮
一个使用高亮特性的非显而易见的方法,实际上是不做任何高亮。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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值