全文搜索中的匹配子字符串无法正常工作

时间:2013-03-18 10:35:54

标签: ruby-on-rails ruby solr indexing sunspot-rails

在我的rails应用程序中,我正在使用solr搜索。子串匹配在本地服务器上正常工作,但它在我的部署服务器上匹配完整的单词。

可搜索的块

searchable do
  text :firstname, :lastname, :login, :mail
  boolean :member
  integer :status
end

schema.xml 是。

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10" side="front" />
  </analyzer>
</fieldType>

我做错了什么?

1 个答案:

答案 0 :(得分:1)

(在此处添加答案以告知您可能存在的不良行为)

FYI, 当您对"text" fieldType中的schema.xml进行更改时,您正在更改应用中每个索引文本字段的配置。有时这不是必需的,因为某些字段需要自定义配置。

例如,让我们说(无论出于何种原因)您想要以不同于其他文本字段的方式处理名字。我们假设你想添加名字的同义词。您首先要在名为fieldType的{​​{1}}

中创建schema.xml
first_name

然后在<fieldtype name="first_name" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> </analyzer> </fieldtype> 文件的fields部分,您将添加两个新的动态字段

schema.xml

注意:&#39;&#39;在<dynamicField name="*_first_name" stored="false" type="first_name" multiValued="false" indexed="true"/> <dynamicField name="*_first_names" stored="true" type="first_name" multiValued="false" indexed="true"/> 名称上表示它是一个存储类型,为动态字段提供*有助于太阳黑子配置

因此,在dynamicField块中,您现在可以执行以下操作:

searchable

现在,您将使用自定义配置的searchable do text :firstname, :as => :user_first_name text :lastname, :login, :mail boolean :member integer :status end 字段。

如果您希望first_name成为存储值(并且您仍想使用自定义配置),则可以实现可搜索的块,如:

"first_name"