我有一个在 Solr 上编入索引的文档,其中包含以下字段:
{
"manufacturerSkuEndsWith": [
"DU351118DR0"
]
}
我的目标是在该领域进行“以”结尾的搜索manufacturerSkuEndsWith。例如,以下查询应与上述值匹配:DR0, 8DR0, 18DR0, 118DR0... 但这些查询不应匹配:DU35, 118DR, 118...
我的问题是查询118与该文档匹配,即使DU351118DR0不以118.
我的 Solr & Lucene 版本是 4.8.1。我发现在这个版本中side="back"不再支持 EdgeNGramTokenizer :LUCENE-3907。在这个线程中,他们建议使用 aReverseStringFilter来获得类似于 EdgeNGramTokenizer 的行为side="back",所以这就是我manufacturerSkuEndsWith在我的 中配置该字段的方式schema.xml:
<field indexed="true" multiValued="true" name="manufacturerSkuEndsWith" stored="true" type="smccTextReversedNGram"/>
<copyField dest="manufacturerSkuEndsWith" source="ManufacturerSku"/>
<fieldType class="solr.TextField" name="smccTextReversedNGram" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" maxGramSize="10" minGramSize="3"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ReverseStringFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ReverseStringFilterFactory"/>
</analyzer>
</fieldType>
但此配置不执行“结尾”搜索:
我怎样才能获得这种类型的搜索呢?
