在太阳黑子中使用edgeNGram过滤器

时间:2012-02-13 05:25:41

标签: ruby-on-rails solr sunspot

我正在尝试使用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

然而它似乎没有效果。我错过了什么?

1 个答案:

答案 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"/>