搜索结果高亮显示是搜索引擎中的常用功能,在Solr中,我们可以如下配置:
<requestHandler name&#61;"/select" class&#61;"solr.SearchHandler"><lst name&#61;"defaults"><str name&#61;"echoParams">explicitstr><str name&#61;"rows">10str><str name&#61;"df">textstr><str name&#61;"hl">truestr><str name&#61;"hl.method">originalstr><str name&#61;"hl.fl">content filename filepathstr><str name&#61;"hl.preserveMulti">truestr><str name&#61;"hl.encoder">htmlstr><str name&#61;"hl.simple.pre"><b>str><str name&#61;"hl.simple.post"></b>str><str name&#61;"f.filename.hl.fragsize">0str><str name&#61;"f.filename.hl.alternateField">filenamestr><str name&#61;"f.filepath.hl.fragsize">0str><str name&#61;"f.filepath.hl.alternateField">filepathstr><str name&#61;"f.content.hl.snippets">3str><str name&#61;"f.content.hl.fragsize">200str><str name&#61;"f.content.hl.alternateField">contentstr><str name&#61;"f.content.hl.maxAlternateFieldLength">750str>lst>requestHandler>
常用的一些属性&#xff1a;
参数 | 默认值 | 描述 |
hl | false | 如需启用highlighting&#xff0c;设置为true |
hl.method | original | highlighting的实现方式。有四个值可选&#xff1a;unified, original, fastVector, postings |
hl.fl | (df&#61;) | 指定需要高亮的一些字段。字段之间用空格或逗号分隔。可以使用*号&#xff08;e.g. text_*&#xff09;, 使用*号时&#xff0c;建议把hl.requireFieldMatch设为TRUE |
hl.q | (q&#61;) | 高亮的查询语句&#xff0c;默认值等于查询语句。一般都是查询什么&#xff0c;结果集中就高亮什么&#xff0c;还没看到需要另外设置的情况 |
hl.qparser | (defType) | hl.q的分析器 |
hl.requireFieldMatch | false | 默认情况下&#xff0c;如果查询中指定了查询哪个field&#xff0c;但是还是会高亮所有hl.fl中指定的field。如果设置为true, 将会只高亮查询中的field。 |
hl.usePhraseHighlighter | true | 为true时&#xff0c;短语做为一个整体被高亮。为false时&#xff0c;短语中的每个单词都会被单独高亮。 |
hl.highlightMultiTerm | true | 为true时&#xff0c;高亮通配符查询 |
hl.snippets | 1 | 指定每个字段中&#xff0c;最多高亮的片断。 |
hl.fragsize | 100 | 返回搜索结果的最大长度。如常见的搜索引擎中&#xff0c;搜索结果只展示了部分文本&#xff0c;不可能把整篇文章都显示出来。需要点击进去才会显示全部 |
hl.tag.pre | 如果hl.method为original&#xff0c;此参数应该是hl.simple.pre。此值通常是HTML或XML标签 | |
hl.tag.post | 如果hl.method为original&#xff0c;此参数应该是hl.simple.post。 | |
hl.encoder | (blank) | 如果为空&#xff0c;返回的文本不会被编码。如果设置为html&#xff0c;则返回的文本中如果包含html/xml的特殊字符的话&#xff0c;将会被转化 &#xff08;e.g. & --> &&#xff09; |
hl.maxAnalyzedChars | 51200 | 高亮匹配的最大长度。如果某个文本符合搜索条件&#xff0c;但是搜索结果的前51200里面不包含搜索的内容&#xff0c;则不会继续往后去高亮匹配的内容。 |
不同的hl.method&#xff0c;还会有不同的参数。需要用到的时候再去查询文档。
当我们输入多个单词&#xff0c;希望在搜索结果里不同的单词用不同的背景色显示。在Solr的样例配置中&#xff0c;发现
<requestHandler name&#61;"/select" class&#61;"solr.SearchHandler"><lst name&#61;"defaults"><str name&#61;"echoParams">explicitstr><str name&#61;"rows">10str><str name&#61;"df">textstr><str name&#61;"hl">truestr><str name&#61;"hl.method">originalstr><str name&#61;"hl.fl">content filenamestr><str name&#61;"hl.preserveMulti">truestr><str name&#61;"hl.encoder">htmlstr><str name&#61;"hl.fragmentsBuilder">coloredstr><str name&#61;"f.filename.hl.fragsize">100str><str name&#61;"f.filename.hl.alternateField">filenamestr><str name&#61;"f.filename.hl.method">fastVectorstr><str name&#61;"f.content.hl.snippets">3str><str name&#61;"f.content.hl.fragsize">200str><str name&#61;"f.content.hl.alternateField">contentstr><str name&#61;"f.content.hl.maxAlternateFieldLength">750str><str name&#61;"f.content.hl.method">fastVectorstr>lst>requestHandler>
注意&#xff1a;1. 使用 fastVector的字段&#xff0c;四个属性&#xff08;termVectors, termPositions, termOffsets, termPayloads&#xff09;必须都为true&#xff0c;且indexed必须也是true。
2. 另外&#xff0c;f.field.hl.fragsize必须设置一个>&#61;18的数&#xff0c;要不然会报如下的exception&#xff1a;
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.