[solr ] NGram分词后高亮会高亮其余的字

summer7611 2016-08-16

之前用一元分词,但是在query不使用双引号来精确搜索的情况下,得到的结果在排序上不令人满意。而二元分词在用户打错字的情况下,又会有一些词搜不到,比如 奥云会,就不能命中 奥运会。

 

这种情况下,我使用了NGram分词,并设置minGramSize = 1, maxGramSize = 2。这样结合了一元和二元的结果。虽然索引时间稍长,但在文本长度不长,又使用过一次加双引号的精确搜索后,用NGram来模糊搜寻,得到的结果比较满意。

 

不过测试中发现高亮出现了问题。 比如有文本 ngram = "为里约奥运会中国女排加油!",而我搜 q = 中国男排, 搜到结果是有 "为里约奥运会中国女排加油!"的,但是高亮项目上,得到的却是 "为里约奥运<em>中国女排</em>加油",高亮的是 "中国女排"。 而我想的到的是分别高亮"中国"和"排"就好。

 

我一开始以为是因为我的min和max设的数不一样造成的,但是都改为3后,搜“奥运会男排加油”,高亮的是“奥运会中国女排加油”。

 

其他原因我暂时没有思路,希望能有高手帮忙看一下。

 

我用的是Solr 5.3版本,附部分schema如下:

<field name="ngram" type="text_ngram" indexed="true" stored="true" multiValued="false"/>

<fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
        <tokenizer class="solr.NGramTokenizerFactory" minGramSize="1" maxGramSize="2"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>
summer7611 2016-08-19
解决了。貌似Standard Highlighter对NGram分词有bug。采用了FastVector Highlighter后解决问题。不过由于开了term vector,又用了NGram分词,检索文件的size是原来用一元时的两倍。
Global site tag (gtag.js) - Google Analytics