Solr:如何突出整个搜索短语?

时间:2014-09-19 09:02:01

标签: solr

A 我需要执行短语搜索。在搜索结果中,我得到了确切的短语匹配,但看着突出显示的部分,我看到这个短语被标记化,即这是我在搜索“第1天”时所得到的:

<arr name="post">
  <str><em>Day</em> <em>1</em>   We have begun a new adventure! An early morning (4:30 a.m.) has found me meeting with</str>
</arr>

这就是我想要收到的结果:

    <arr name="post">
  <str><em>Day 1</em>   We have begun a new adventure! An early morning (4:30 a.m.) has found me meeting with</str>
</arr>

我正在做的查询是: 管理控制台:

q = day 1 
fq = post:"day 1" OR title:"day 1"
hl = true
hl.fl =title,post

选择Q =天+ 1和; FQ =交%3A%22天+ 1%22 + OR +标题%3A%22天+ 1%22安培;重量= XML&安培;缩进=真安培; HL =真安培; hl.fl =标题%2Cpost&安培; hl.simple.pre =%3Cem%3E&安培; hl.simple.post =%3C%2Fem%3E

Theese是我的领域:

     <field name="post" type="text_general" indexed="true" stored="true" required="true" multiValued="false" />
      <field name="post" type="text_general" indexed="true" stored="true" required="true" multiValued="false" />

这是我的fied类型text_general的solr架构部分:

    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />

    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.GreekStemFilterFactory"/>
    <filter class="solr.GreekLowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

B)我可以在突出显示部分看到更令人不安的结果,即突出显示不是预期的整个单词,而是单个片段:.where you get to see all of Athens ... <em>Day</em> 2 - Carmens 我不想在突出显示的部分看到这个结果(只需要看到两个单词“第1天”)。有什么想法吗?

我正在阅读Solr高亮部分但是......真的......甚至没有一个例子!!!

2 个答案:

答案 0 :(得分:6)

需要插入的参数是hl.q,这基本上意味着“我想要突出显示这个短语”,并且hl.usePhraseHighlighter = true和hl.useFastVectorHighlighter = true

因此,通过添加到我的原始查询:&hl.q="Day+1"&hl.usePhraseHighlighter=true&hl.useFastVectorHighlighter=true工作。

代表B)我将fq = post:"day 1" OR title:"day 1"更改为fq = post:"day 1"。我知道后者不是我所需要的,因为它是无效的。

使用的fastVectorHighliter配置:

   <field name="post" type="text_general" indexed="true" stored="true" required="true" multiValued="false"  termVectors="true" termPositions="true" termOffsets="true"/>

答案 1 :(得分:1)

查看docs我找到了一个选项,可以加入彼此相邻的元素的突出显示。

选项为hl.mergeContiguous