由于干扰,避免在Solr上缓慢突出显示

时间:2011-07-29 13:33:31

标签: solr highlighting stemming

我对使用Solr感到很陌生,但是想请求你的帮助。 我正在开发一个应该能够突出显示查询结果的应用程序。为此,我正在使用正则表达式framenter:

<highlighting>
<fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter">
<lst name="defaults">
  <int name="hl.fragsize">500</int>
  <float name="hl.regex.slop">0.5</float>
  <str name="hl.pre"><![CDATA[<b>]]></str>
  <str name="hl.post"><![CDATA[</b>]]></str>
  <str name="hl.useFastVectorHighlighter">true</str>
  <str name="hl.regex.pattern">[-\w ,/\n\"']{20,300}[.?!]</str>
  <str name="hl.fl">dokumentum_syn_query</str>
</lst>

    该字段使用术语向量和偏移量编制索引:

<field name="dokumentum_syn_query" type="huntext_syn" indexed="true" stored="true"   multiValued="true" termVectors="on" termPositions="on"  termOffsets="on"/>
<fieldType name="huntext_syn" class="solr.TextField" stored="true" indexed="true" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="com.morphologic.solr.huntoken.HunTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_query.txt" enablePositionIncrements="true" />
        <filter class="com.morphologic.solr.hunstem.HumorStemFilterFactory"
        lex="/home/oroszgy/workspace/morpho/solrplugins/data/lex"
        cache="alma"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
        <analyzer type="query">
          <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_query.txt" enablePositionIncrements="true" />
      <filter class="com.morphologic.solr.hunstem.HumorStemFilterFactory"
        lex="/home/oroszgy/workspace/morpho/solrplugins/data/lex"
        cache="alma"/>
          <filter class="solr.SynonymFilterFactory" synonyms="synonyms_query.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
</fieldType>

突出显示效果很好,除非它真的很慢。我意识到这是因为荧光笔/碎片机确实再次产生了所有结果文件。

请你帮我解释为什么会发生这种情况我应该怎样避免这种情况? (我认为使用fastvectorhighlighter会解决我的问题,但事实并非如此)

2 个答案:

答案 0 :(得分:1)

问题是,我尝试使用值“on”而不是“true”。因此,该方案的正确行是:

    <field name="dokumentum_syn_query" type="huntext_syn" indexed="true" stored="true"   multiValued="true" termVectors="true" termPositions="true"  termOffsets="true"/>

答案 1 :(得分:0)

通过突出显示避免“缓慢”的solr结果,我决定不使用solr突出显示。 我在客户端编写了突出显示功能。 这项工作对我而言,但有点棘手,因为你必须在客户端处理搜索短语,就像solr在服务器端做的那样,以便在客户端找到标记化和词干化的术语 - 标记,找到了什么solr并找到了。 这意味着:您必须在客户端实现词干功能。

替代:

我认为,结果集中的术语向量为您提供了有关您必须在客户端突出显示的术语位置的信息。您可以使用这些信息突出显示客户端上的术语,而无需客户端上的实现词干提取器。但我认为:最后这不是一个替代方案。因为Solr仍然需要计算单词的位置 - 所以你不会在服务器端节省时间。