在 synonyms.txt 中,我有:
you're => you are
当查看“因为你是我的”提供分析工具的内容时,它在“因为你是我的”中进行了扩展,这对于全文搜索来说很好,但对于带状疱疹来说是一个大问题。我想知道扩展是否没有放在最后,但是“你是因为我的”被扩展为“你因为是我的”,中间插入了以下单词。我还测试了“因为我的你是”,它被扩展为“因为我的你是”。
关于为什么会发生这种情况的任何想法?
这是分析工具的屏幕截图,使其 100% 清晰:
架构中的查询部分:
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="0" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.DictionaryCompoundWordTokenFilterFactory" dictionary="wordlists/english-common-nouns.txt" minWordSize="5" minSubwordSize="4" maxSubwordSize="15" onlyLongestMatch="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
possible with WordDelimiterFilter in conjuncton with stemming. -->
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
我只是让 WDF 进行标记化,你是 => 你是。在我定义的 synonyms.txt 中:
you re => you are
这不是最优雅的方式,但它有效,即按您需要的顺序存储令牌。
您可以使用 Synonym-Expanding EDisMax Parser,它会在进行文本分析之前添加同义词:https ://github.com/healthonnet/hon-lucene-synonyms