2011-12-15 11 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に分解される。

私はこれに費やした時間を考えれば、私が紛失している小さな構成の問題があると確信していますが、利用可能なドキュメント(私が見たもの)からは何かを知ることはできません。

ありがとうございます。 OK

+0

多分あなたはあなたの質問に(編集する)いくつかの詳細を追加して、他のユーザーにとってより便利にすることができます。あなたはあなたの答えを自動的に受け入れることさえできます。 – javanna

+0

@ジャバンナ、それは実際に私に2日間私の答えを自動的に受け入れることはできません、そうです。編集や答えをしたいのかどうかはわかりませんでした。私は答えに落ち着いて、待っている期間が終わったら私は受け入れるでしょう – Jared

+0

偉大な、ありがとう! – javanna

答えて

6

はので、私は、このリンクSolr filters: PatternReplaceCharFilterを横切り、一番下に来たもう一つの「ラッキー」Google検索、彼らは私が説明すると思うの詳細パラメータを議論した後、それを考え出した、より良いフィルタは、実際にどのように動作するか:

CharFilterは1文字で動作し、パターンマッチングではさらに多くの文字を読み取るために内部バッファが必要です。 MaxBlockCharsを使用すると、バッファのサイズを指定できます。

私の問題は、文字列全体ではなく1文字で読むことです。これは私が投稿した例に反するものでした。そのソリューションは私のcharFilterにありました。私はMaxBlockChar属性を追加しました。 LucidImaginationのサイトやsolr wiki(私が出会ったもの)には、この属性の記述はありませんでした。

+0

面白いですが、フィルターノードに追加しようとしたときに不明なパラメーター{maxBlockChars = 10000}があります。 –

+0

@TimBezhashvylyこれはsolr 3.1のためのものでしたが、私が思い出したように、バージョン6にあるように変更されている可能性があります – Jared

関連する問題