我正在使用EdgeNgramFilterFactory进行部分搜索
<filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front"/>
&#13;
因此,如果单词&#34; sfx&#34; ,则不会将其存储在索引中,因为其长度为&lt; 4,我无法搜索它,有没有办法存储与lenghth&lt;在索引中使用minGramSize并使其可搜索???
使用Solr 4.3 谢谢......
答案 0 :(得分:1)
你必须将minGramSize改为较低的长度,比如3你的情况。 或者你可以将它保持为2。
在早期版本(我用过3.3)中有正面和背面,所以我就像这样使用它。
<fieldType name="text_reference" class="solr.TextField" sortMissingLast="true" omitNorms="true" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="50" side="front"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="50" side="back"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
或者您可以使用其他字段类型索引文本,您可以在其中保留文本,而不会在该字段中进行ngraming和搜索。如果它们不是任何n-gram过滤器,那么长度为3的文本将被索引。
<fieldType name="text_delimeter" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" preserveOriginal="1" catenateAll="1" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>