我正在尝试使用EdgeNGramFilterFactory来索引名称字段。我尝试过模仿schema.xml
<fieldType name="text_prefix" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ISOLatin1AccentFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="20" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ISOLatin1AccentFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
</analyzer>
</fieldType>
...
<field name="text_prefix" stored="false" type="string" multiValued="true" indexed="true"/>
在我的模型中我有:
searchable do
text :name, :as => :text_prefix
然而它似乎没有效果。我错过了什么?
答案 0 :(得分:3)
您的架构看起来不错,除了一件事:您的text_prefix
字段属于string
而非text_prefix
,因此它不使用EdgeNGramFilterFactory
。
你应该改变这一行
<field name="text_prefix" stored="false" type="string" multiValued="true" indexed="true"/>
像这样
<field name="text_prefix" stored="false" type="text_prefix" multiValued="true" indexed="true"/>