Solr FastVector短语在多值字段上突出显示

wlzqhblo  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(215)

太阳社区!我在这个问题上花了这么多时间...我真的需要一些指导。

**问题:**带有slop的短语查询与文档匹配,但荧光笔与代码段不匹配,即使代码段在文档中。

我们有一个庞大的法律的文件数据库。当我们的用户使用搜索时,他们希望搜索段落内部,以获得更多相关的结果。他们不关心文件,其中来自查询的单词分散在文档中。我们在值之间有很大间隔的多值字段上使用带slop的PhraseQuery实现了此功能。每个值都是文本中的一个单独段落。位置增量间隙=5000
以下是我们的字段配置:

<fieldType name="text_split_by_paragraphs" class="solr.TextField" positionIncrementGap="5000" autoGeneratePhraseQueries="true">
    <analyzer>
        <charFilter class="solr.HTMLStripCharFilterFactory"/>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.HunspellStemFilterFactory" dictionary="uk_UA.dic" affix="uk_UA.aff"/> 
    </analyzer>
    <similarity class="solr.BM25SimilarityFactory">
          <str name="k1">0.4</str>
          <str name="b">0.2</str>
    </similarity>
</fieldType>

<field name="f_text_paragraphs" type="text_split_by_paragraphs" indexed="true" stored="true" multiValued="true" required="false" omitNorms="false" termVectors="true" termPositions="true" termOffsets="true" />

假设我们有一个非常简单的数据存储在一个f_text_paragrations字段中,每个值之间的位置间隔是5000,如上所述:

  • “苹果很好吃,”
  • “苹果让我快乐,”

让我们运行一些伪查询。

  • 查询:f_text_paragrations:“苹果好吃”~5000 -好的
  • 查询:f_text_paragrations:“美味的苹果”~5000 -确定
  • 查询:f_text_paragrations:“美味快乐”~5000 -失败,这是正确的,因为单词在multiValued字段中的值不同。

查询功能如预期般完美。但突出显示的工作方式不一样...以下是突出显示设置:

hl=true&
hl.useFastVectorHighlighter=true&
hl.usePhraseHighlighter=false&
hl.highlightMultiTerm=true&
hl.fragmentsBuilder=colored& // custom builder
hl.boundaryScanner=breakIterator&
f.f_text_paragraphs.hl.fragsize=400&
f.f_text_paragraphs.hl.maxAnalyzedChars=2147483647&
f.f_text_paragraphs.hl.snippets=5&
hl.fl=f_text_paragraphs&

使用hl.使用短语荧光笔=true

  • 查询:f_text_paragrations:“苹果美味”~5000 - OK,返回代码片段。
  • 查询:f_text_paragrations:“美味的苹果”~5000 -失败,即使搜索与相同的查询匹配。看起来当usePhraseHighlighter设置为true时,SOLR会保留词序...这不是我们需要的。

使用hl.使用短语荧光笔=false

  • 查询:f_文本_段落:“Apple delicious”~5000 - OK,但它还添加了第二个值“Apples make me happy”,因为出于某种原因SOLR忽略了slop,只匹配了第二个值,因为里面有Apples单词。
  • Query:f_text_paragrations:“美味的苹果”~5000 -还可以,但是和上面一样的问题。
    **问题:**如何让highlighter尊重slop而忽略单词顺序?返回代码片段,其中所有单词都在同一个段落中(slop=5000)。我们期望与搜索查询相同的逻辑。
brgchamk

brgchamk1#

Lucene/Solr的“Unified Highlighter”通常是最好的一款。它是最精确的荧光笔,事实上它是在你正在工作的同一个搜索域(法律的搜索)中构建/设计的,在这个搜索域中,高亮的精确度是非常重要的。使用hl.method=unified切换到它。确保检查documentation以获得大量的细节。(根据需要切换到你的Solr版本的文档)。
顺便说一句,Solr community最好在它的用户列表和Slack中找到;而不是堆栈溢出。

相关问题