2011-12-15 8 views
7

所以我在Solr很新,但我試圖使用PatternReplaceCharFilterFactory對將要存儲的電話號碼字符串進行一些預處理。下面是該領域的配置:Solr PatternReplaceCharFilterFactory不會替換指定的模式

<fieldType name="phone_number" class="solr.TextField" > 
    <analyzer> 
    <charFilter class="solr.PatternReplaceCharFilterFactory" 
       pattern="\(?(\d{3})?\)?[-. ]?(\d{3})[-. ]?(\d{4})" 
       replaceWith="$1-$2-$3"/> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    </analyzer> 
</fieldType> 

我已經測試了正則表達式和它匹配的一切,我會期待它(例如555.444.1234,(555)444-1234,5554441234,4441234,444-1234。等)。

現在我的理解是,正則表達式應匹配傳遞給它的任何東西,並用指定的模式替換它。所以如果他們通過我555.123.4444我期望它導致555-123-4444被傳遞給StandardTokenizerFactory。從那裏它將被分解成代幣555,123,4444。

考慮到我花了多少時間,我確信有一個小的配置問題,我錯過了,但從可用文檔(我見過),我不知道它是什麼。

預先感謝您。

+0

也許你可以添加一些細節到你的問題(編輯它),使其對其他用戶更有用。你甚至可以自動接受你的答案。 – javanna

+0

@javanna,它實際上不會讓我自動接受我的答案2天或我會。我不確定我是否想編輯或回答。我解決了答案,一旦等待期結束我會接受 – Jared

+0

太好了,謝謝! – javanna

回答

6

行,所以我想通了一個更「幸運」的谷歌搜索我碰到這個鏈接Solr filters: PatternReplaceCharFilter並在最底層來了,他們商量,我想解釋高級參數後更好的過濾器實際上是如何工作的:

CharFilter對單個字符進行操作,並且模式匹配需要內部緩衝區來讀取更多字符。 MaxBlockChars允許您指定緩衝區的大小。

我的問題是它讀取的是單個字符而不是整個字符串。這與我看到的例子相反。所以解決方案是在我的charFilter我添加了MaxBlockChar屬性,並說它工作。在LucidImagination的網站和solr wiki上我沒有提到這個屬性(我遇到過)。

+0

有趣的是,當我試圖將它添加到過濾器節點時,我得到了'Unknown parameters:{maxBlockChars = 10000}。 –

+0

@TimBezhashvyly這是爲了3.1版本,如果我記得,它可能會改變,因爲它們在版本6上 – Jared