Solr:为每个搜索词出现单独的高亮片段

时间:2015-06-29 13:32:31

标签: solr highlighting solrj

我使用Solr 5搜索大(文本)文档。对于每个搜索结果,我显示包含突出显示的搜索匹配的片段。这可以使用Solr的Select first row in each GROUP BY group?来解决问题。然而我发现如果发现几个匹配彼此相近,它们将合并为一个片段,即使是hl.mergeContiguous=false。参数是

SolrQuery query = new SolrQuery();
query.setQuery(rawQuery);
query.set("defType", "lucene");
query.setRows(1000);
query.setHighlight(true);
query.setHighlightFragsize(200);
query.setHighlightSnippets(20);
query.setParam("hl.fl", "content");
query.setParam("hl.maxAnalyzedChars", "-1");
query.setParam("hl.mergeContiguous", false);

示例:我使用圣经翻译进行测试,仅仅是因为它的长度。搜索野兽会产生(以及其他许多)

  

... 7:8干净的野兽野兽不洁净的鸟类和鸟类的一切,7: 9在诺亚进入了两个和两个......

我宁愿让这个片段两次,因为它包含两次搜索词。在这种情况下手动复制片段对我来说显得很笨拙。我错过了查询参数,还是需要自定义BoundaryScanner才能实现此目的?

1 个答案:

答案 0 :(得分:2)

您可以考虑使用hl.regex - 基于正则表达式的分段程序,并根据您的条款准备正则表达式并附加到请求。如果您想尝试此操作,也请查找相关的hl.regex.slophl.regex.maxAnalyzedChars参数。

或者可以将标准荧光笔的片段大小:hl.fragsize缩小为您认为可能不存在两个术语的内容。

BoundaryScanner仅适用于FastVectorHighlighter,如果没有OOTB参数可以使用,则可以选择。