Solr高亮匹配查询词

时间:2018-12-18 11:23:35

标签: solr solr-highlight

我正在使用Solr进行模糊搜索(例如foo~2 bar~2)。 Highlighting使我可以突出显示结果集中匹配的文档片段。

例如:

Result 1: <em>food</em> <em> bars</em> Result 2: mars <em>bar</em>

以此类推。

对于文档中突出显示的每个匹配项,我需要找出这些片段与之匹配的查询词以及查询中这些查询词的偏移量。像这样:

Result 1: {<em>food</em> MATCHED_AGAINST foo QUERY_OFFSET 0,2} {<em> bars</em> MATCHED_AGAINST bar QUERY_OFFSET 3,5} Result 2: mars {<em>bar</em> MATCHED_AGAINST bar QUERY_OFFSET 3,5}

在Solr中有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

一种可能性是定制将产生所需信息的荧光笔。想法很简单-您有方法

org.apache.lucene.search.highlight.Highlighter#getBestTextFragments

在此方法中,您可以对QueryScorer进行低级访问,其中包括几个有用的属性,例如

private Set<String> foundTerms;
private Map<String,WeightedSpanTerm> fieldWeightedSpanTerms;
private Query query;

我非常确定,使用此信息,您应该能够产生所需的输出

答案 1 :(得分:0)

我可以找出的一种破解方法是对查询中的每个术语使用不同的(唯一)boost因子,然后从debug得分中为每个匹配的术语检索提升因子,从而得出结论分数来自哪个术语。

例如,我们可以使用foo~2^3.0 bar~2^2.0进行查询(将bar的得分提高2.0,保持与foo的匹配得分不变)。从调试分数输出中,检查提升因子:

Result 1: food bars: score <total score 1> = food * 3.0 * <other scoring terms> + bars * 2.0 * <other scoring terms>
Result 2: mars bar: score <total score 2> = bar * 2.0 * <other scoring terms>

很显然,food与提升因子3.0相匹配,并且bars以及bar与提升因子2.0相匹配。维护一个查找词典时,首先要对哪个术语有什么增强?很容易找出匹配的术语。

要考虑的两个因素:

  1. 如果提升因子为1.0,则solr调试分数不会打印出来。
  2. Solr可能会基于模糊匹配,TF-IDF等为该术语合并一些默认的提升因子。在这种情况下,显示的提升因子将与我们在查询中提供的提升不匹配。因此,我们需要执行两次查询-一次不进行任何增强(以了解每个术语的默认增强),一次执行以增强(以查看其现在有多少变化)。

希望这对某人有帮助。