2012-09-10 62 views
1

我試圖用一個copyField命令採取哪些包含數值,但有一些相關的文本到數字字段可以是範圍過濾的文本字段。條非數字字符,並轉換爲浮動場

例如。正常值1.3或200 髒值200cc或1,500

是否可以設置Float字段類型,該類型將使用過濾器去除非數字字符?

如果我定義它是這樣,過濾器似乎並沒有被處理

<fieldType name="floatNoText" class="solr.TrieFloatField" > 
    <filter class="solr.PatternReplaceFilterFactory" pattern="[^0-9.]" replacement="" replace="all"/> 
    </fieldType> 

如果我用分析儀進行定義:

<fieldType name="floatNoText" class="solr.TrieFloatField" > 
     <analyzer> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="[^0-9.]" replacement="" replace="all"/> 
    </analyzer> 
    </fieldType> 

我得到以下錯誤:

SEVERE:org.apache.solr.common.SolrException:沒有類或分詞器的分析器&過濾器列表

有沒有辦法設置一個數字字段,以便您可以應用過濾器呢? 或者,我可以讓這個源字段呈現數據的一個簡化版本的拷貝場?

回答

0

嘗試以下字段類型: -

<fieldType name="numericOnly" class="solr.TextField" sortMissingLast="true" omitNorms="true"> 
    <analyzer> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory" /> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="[^0-9]+" replacement="" replace="all" /> 
    </analyzer> 
</fieldType> 

這應該只存儲數值和取代一切。您可以根據需要微調正則表達式。
此外,這將只適用於索引值。
這個值將不被存儲,因此與檢索到的值仍然是字母數字。

+0

這是好的,但它並沒有將它轉換爲浮動型。您需要一個數字類型才能正確支持範圍查詢。 – Simon

0

我想他希望該字段是TrieFloatField類型的,因爲它將運行範圍查詢等,比僅僅是文本字段更具有高性能。

因此,一種方法是使用update processor,您可以在那裏進行清理,並將正確的數值插入字段中。