2013-03-18 84 views
0

在我的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

是架构一样在两台服务器上?你是否重新编制你的数据? – Jayendra 2013-03-18 14:22:55

+0

是的,两台服务器上的架构相同。但不知何故,这不是驯服。删除sunspot.yml和solr目录后重新安装sunspot_rails的确有窍门。谢谢你的评论 :) – 2013-03-18 17:59:51

回答

1

(这里添加一个答案,告诉你可能不希望的行为)

仅供参考, 当您在更改"text" fieldTypeschema.xml要更改的配置索引的文本字段在您的应用程序。有时这是不期望的,因为有些字段需要自定义配置。

例如,让我们说(无论出于何种原因),您希望以不同于其他文本字段的方式处理名字。假设你想添加名字的同义词。你会首先创建一个fieldTypeschema.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> 

然后在schema.xml文件的fields部分,您将添加两个新的动态领域

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

注:' s'在dynamicField上的名字是表示它是一个存储类型,为动态字段提供*有助于配合太阳黑子配置

因此,在你searchable块,你现在可以做的:

searchable do 
    text :firstname, :as => :user_first_name 
    text :lastname, :login, :mail 
    boolean :member 
    integer :status 
end 

现在,这将使用自定义配置"first_name"场。

如果你想FIRST_NAME成为储值(你仍然想使用自定义配置),你会实现你像搜索块:

searchable do 
    text :firstname, :stored => true, :as => :user_first_names 
    text :lastname, :login, :mail 
    boolean :member 
    integer :status 
end