【问题标题】:Solr: how to highlight the whole search phrase only?Solr:如何仅突出显示整个搜索词组?
【发布时间】:2014-09-22 17:24:45
【问题描述】:

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

select?q=day+1&fq=post%3A%22day+1%22+OR+title%3A%22day+1%22&wt=xml&indent=true&hl=true&hl.fl=title%2Cpost&hl.simple.pre=% 3Cem%3E&hl.simple.post=%3C%2Fem%3E

这些是我的领域:

     <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" />

这是我的字段类型 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 ... &lt;em&gt;Day&lt;/em&gt; 2 - Carmens 我不想在突出显示的部分看到这个结果(只需要看到“第 1 天”这两个词)。有什么想法吗?

我正在阅读 Solr 高亮部分,但.. 真的... 甚至没有 1 个示例!!!

【问题讨论】:

  • 我对您帖子的最后一部分感到有些困惑。一开始你写道你只收到了第 1 天的回复,而最后你写道你收到了另一个回复。是哪一个?
  • 所有文档都包含“第 1 天”,但在某些情况下,字段帖子可以是 =“第 1 天我做了这个和那个......第 2 天我做了那些其他的事情......”。我确定在文档部分中,结果至少包含短语 "Day 1" 。 “回复”有两种形式:文档和这些文档的突出显示版本。

标签: solr


【解决方案1】:

需要插入的参数是hl.q,基本意思是“我要突出显示这个词组”和hl.usePhraseHighlighter=true 和hl.useFastVectorHighlighter=true

所以通过添加到我的原始查询:&amp;hl.q="Day+1"&amp;hl.usePhraseHighlighter=true&amp;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"/>

【讨论】:

    【解决方案2】:

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

    选项是hl.mergeContiguous

    【讨论】:

    • 有很多关于同一个问题的帖子,其中该参数不起作用,并且需要说已经尝试过但也不起作用。例如stackoverflow.com/questions/16700916/…
    • 这是指片段(又名 sn-ps)而不是亮点本身
    猜你喜欢
    • 2016-11-25
    • 2012-05-21
    • 2013-09-16
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2015-01-28
    • 2011-09-22
    相关资源
    最近更新 更多