2014-03-04 69 views
0

假設我有幾個字段的Solr文檔。現在,由於某些特定的原因,我必須修改某個字段的類型。我知道,在修改該字段的「類型」後,我將無法使用該字段進行查詢。我可以通過其他字段查詢嗎?Solr。在schema.xml中修改其中一個字段的類型

我的字段定義爲

<field name="searchtag" type="text_general" indexed="true" stored="true"/> 

新定義是

<field name="searchtag" type="text_ngram" indexed="true" stored="true" multivalued="true"/> 

字段類型定義

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <!-- in this example, we will only use synonyms at query time 
     <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
     --> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

<fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15"/> 
    </analyzer> 
    <analyzer type="query"> 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
       <filter class="solr.StandardFilterFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

感謝

+0

嗨buddy86,請你能更好的解釋一下你寫的是什麼意思:「我能查詢其他字段嗎?」 ?您可以在兩個不同的字段中索引數據o也許您可以使用字段進行索引並設置不同類型的副本字段。 – Dany

+0

「其他字段」表示除特定Solr文檔中出現的** searchtag **以外的字段。假設我在Solr文檔中有10個不同的字段。其中之一是「searchtag」。所以,我在談論除id和searchtag之外的其他8個字段。希望,現在很明顯。 – buddy86

回答

0

我找到了答案。

我在我的Solr-4.2.1上的數據上嘗試過一個小測試用例。正如我所說,以前「s​​earchtag」的類型是text_general。我拿了一個新的Solr實例。在那裏,我將searchtag定義爲text_general類型的字段。我還定義了一些其他領域。然後,我將一些數據編入這些字段以及searchtag。因爲這是一個簡單而直接的方式,所以一切正常。我用searchtag和其他字段查詢並得到正確的結果。

然後我修改了schema.xml。我將searchtag的類型從text_general更改爲text_ngram。修改架構後,我重新啓動了Solr實例。現在,我實際上並沒有爲搜索標籤索引的數據感到困擾。因爲我搞砸了該領域的模式。所以,我在其他領域執行了相同的查詢。我很高興能得到和以前一樣的Solr文檔。雖然我使用了模式,但其他字段的其他索引完好無損。這就是我想要的。

希望這個測試案例能夠幫助你在你所在的地區,如果你陷入像我這樣的問題。

注意:我已經提到了關於「searchtag」的模式定義以及問題區域中的字段類型。