2013-10-28 187 views
1

我尝试使用SOLR 4.4的高亮功能。经过一番尝试终于正常工作,但没有如我所料:Solr-Highlight:意外的结果

Generell setting:我有一个文本和一个标题字段。两者都被索引和搜索,但突出显示仅在标题字段中需要。

  • 第一尝试:一个文档的标题字段设定为string =>即使该字段储存
  • 第二尝试没有高亮-结果:改变字段text_ws(仅WhiteSpace-Tokenizer)。我不太确定我是否需要index标题栏,所以我做到了。 => HL工作,但只限于直接匹配(q =苹果公司没有HL Apple-Pie在标题中 - q = Apple-Pie)
  • 第3次尝试:将ngram添加到标题字段。现在,q:apple给出了一个命中,但突出显示了完整的Apple-pie,而不仅仅是查询术语。

现在的问题:是预期的行为,或者是有没有办法既能突出的查询词


编辑:片段的..

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

我改变了分词器从WhiteSpaceTokenizerFactoryNGramTokenizerFactory并删除了 - >现在是(几乎)按预期工作