Избегайте медленного выделения на Solr из-за - PullRequest
3 голосов
/ 29 июля 2011

Я новичок в использовании Solr, но хотел бы попросить вас о помощи. Я занимаюсь разработкой приложения, которое должно быть в состоянии выделить результаты запроса. Для этого я использую регулярное выражение:

<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 ]

1 голос
/ 08 августа 2011

Проблема была в том, что я пытался использовать значения «on» вместо «true». Таким образом, правильная строка на схеме:

    <field name="dokumentum_syn_query" type="huntext_syn" indexed="true" stored="true"   multiValued="true" termVectors="true" termPositions="true"  termOffsets="true"/>
0 голосов
/ 03 августа 2011

чтобы избежать "медленных" результатов solr при подсветке, я решил не использовать solr подсветку.Я кодировал функции подсветки на стороне клиента.Это работа для меня, но она немного сложна, потому что вы должны обрабатывать поисковую фразу на стороне клиента так же, как solr делает на стороне сервера, чтобы найти также токенизированные и основанные на клиенте термины - чтобы отметить,что было найдено и найдено.Это означает, что вы должны реализовать функциональность стемминга на стороне клиента.

Альтернатива:

Я думаю, вектор терминов в наборах результатов дает вам информацию о положении термина, на котором вы должны выделитьна стороне клиента.Вы можете использовать эту информацию, чтобы выделить термины на стороне клиента, не внедрив стеммер на клиенте.Но я думаю: наконец, это не совсем альтернатива.Потому что Solr все еще нужно вычислить положение слов - поэтому вы не сэкономите время на стороне сервера.

...