【问题标题】:Solr: Separate highlight fragment for each search term occurrenceSolr:每个搜索词出现的单独突出显示片段
【发布时间】:2015-09-15 23:58:41
【问题描述】:

我使用 Solr 5 搜索大型(文本)文档。对于每个搜索结果,我都会显示一个包含突出显示的搜索匹配的片段。这适用于 nicley,使用 Solr 的 Standard Highlighter。然而我发现,如果发现多个匹配项彼此靠近,它们将合并为一个片段,即使是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);

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

...7:8 洁净的走兽、不洁净的走兽、飞鸟和地上一切爬行的动物,7: 9 有两个和两个进入挪亚进入......

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

【问题讨论】:

    标签: solr highlighting solrj


    【解决方案1】:

    您可以考虑使用hl.regex - 基于正则表达式的分片器,并根据您的条款准备正则表达式并附加到请求中。如果你想试试这个,也可以寻找相关的hl.regex.slophl.regex.maxAnalyzedChars 参数。

    或者可以减少标准荧光笔的片段大小:hl.fragsize 到您认为您的术语的两次出现可能不存在的东西。

    BoundaryScanner 仅适用于 FastVectorHighlighter,如果没有 OOTB 参数有效,则可以作为选项。

    【讨论】:

    • 感谢您的建议。其实我对碎片的样子很满意,所以我不愿意改变它们的大小或图案来创作。我想原因更深层次的原因是为什么 Solr 正在合并结果彼此接近的片段。不过我会看看BoundaryScanner
    猜你喜欢
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    相关资源
    最近更新 更多