【发布时间】:2016-07-12 10:20:26
【问题描述】:
我正在使用 Solr,想了解 EdgeNGramFilterFactory 的工作原理。
例如,我正在搜索术语“1 tb”。请注意,我搜索的字段的属性很少。
这是该字段类型在索引时间上应用的过滤器。
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10" />
现在,当我搜索“1 tb”这个词时,我没有得到想要的结果。
我很少有带有“5 MegaPixels”一词的产品,当我搜索“5 meg”时,它会给出结果。后来我发现它不适用于“5 me”。并且不给出结果。
如果我删除 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>
【问题讨论】:
-
您是否在 solr 管理页面上分析过同样的问题?该字段使用的确切 fieldType 是什么?
-
我创建了文本字段类型以应用所需的单独过滤器和标记器。
-
你能描述一下吗?它有什么?
-
嗨,已添加到问题中