我正在与Solr合作,想了解EdgeNGramFilterFactory的工作原理。
例如,我正在搜索术语“1 tb”。请注意,我搜索的字段的属性很少。
以下是此字段类型的索引时间应用的过滤器。
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10" />
现在,当我搜索“1 tb”这个词时,我没有得到理想的结果。
我的产品很少有术语“5 MegaPixels”,当我搜索“5 meg”时,它给了我结果。后来我发现它对“5我”不起作用。并没有给出结果。
如果我删除nGram过滤器,它可以正常工作。此外,如果我们设置minGramSize =“1”,那么查询“1 tb”工作正常。
我假设对于术语tb,令牌tb应该是有效的。但是当我应用minGramSize为2时,似乎没有创建它!
有人可以解释原因吗?
这是架构中定义的字段。
<fieldType name="AttributesField" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="10" />
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
答案 0 :(得分:0)
您可以尝试使用以下fieldType
<fieldType name="AttributesField" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
PorterStemFilterFactory
:它执行标准化过程,从单词中删除常见结尾。
Example: "riding", "rides", "horses" ==> "ride", "ride", "hors".
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
根据以下配置,字符串值 Nigerian
会细分为以下字词
Nigerian => "ni", "nig", "nige", "niger", "nigeri", "nigeria", "nigeria", "nigerian"