2013-03-18 112 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 
相關問題