2013-10-28 7 views
1

Я пытаюсь использовать функцию подсветки SOLR 4.4. После некоторых попыток он, наконец, работает, но не так, как я ожидал:Solr-Highlight: неожиданные результаты

Настройка генератора: у меня есть текст и поле заголовка. Оба индексируются и обыскиваются, но подсветка требуется только в поле заголовка.

  • первого попытка: название поле в документе было установлено как string => нет подсвечивания-результатов, даже если поле хранилось
  • 2-я попытка: не изменили поле для text_ws (только WhiteSpace-Tokenizer). Я не был уверен, действительно ли мне было index название поля, поэтому я сделал это. => HL, но только для прямых совпадений (q = Apple не назвала HL Apple-Pie в заголовке - q = Apple-Pie)
  • 3-я попытка: добавлено ngram в поле заголовка. Теперь q: apple дает удар, но выделяет полный Apple-pie, а не только термин запроса.

Теперь вопрос: что ожидаемое поведение или есть способ только выделить термин запроса


EDIT: фрагменты для ..

.. solrconfig. XML

<requestHandler name="/query" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="echoParams">explicit</str> 
     <str name="wt">json</str> 
     <str name="indent">true</str> 
     <str name="df">text</str> 
     <str name="defType">edismax</str> 
     <str name="qf">title, text</str> 
     <str name="hl">true</str> 
     <str name="hl.fl">title</str> 
     <str name="hl.simple.pre">&lt;b class="text-success"&gt;</str> 
     <str name="hl.simple.post">&lt;/b&gt;</str> 
    </lst> 
</requestHandler>  

.. schema.xml

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <charFilter class="solr.HTMLStripCharFilterFactory" /> 
     <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
     <filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="0" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" preserveOriginal="1" /> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.SnowballPorterFilterFactory" language="German" /> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" preserveOriginal="1" /> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.SnowballPorterFilterFactory" language="German" /> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
    </analyzer> 
</fieldType> 

<fieldType name="text_ngrammed" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <charFilter class="solr.HTMLStripCharFilterFactory" /> 
     <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="10" /> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 

     <!--  <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> --> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer> 
</fieldType> 

<fields> 
    <!-- IDs --> 
    <field name="id" type="string" indexed="true" stored="true" required="true" /> 
    <!-- Content --> 
    <field name="title" type="text_ngrammed" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" /> 
    <field name="text" type="text" indexed="true" stored="false" multiValued="true" /> 
</fields> 
+0

Не могли бы вы дать нам свой schema.xml, вероятно, соответствующие requesthandlers от вашего solrconfig.xml (в проверьте настройки по умолчанию) и запрос образца, который вы делаете? Это поможет воспроизвести вещи. – cheffe

ответ

0

Я изменил Tokenizer от WhiteSpaceTokenizerFactory до NGramTokenizerFactory и удалили -> теперь это (почти) работает, как ожидалось

Смежные вопросы