我使用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
才能实现此目的?
答案 0 :(得分:2)
您可以考虑使用hl.regex
- 基于正则表达式的分段程序,并根据您的条款准备正则表达式并附加到请求。如果您想尝试此操作,也请查找相关的hl.regex.slop
,hl.regex.maxAnalyzedChars
参数。
或者可以将标准荧光笔的片段大小:hl.fragsize
缩小为您认为可能不存在两个术语的内容。
BoundaryScanner
仅适用于FastVectorHighlighter
,如果没有OOTB参数可以使用,则可以选择。