2011-12-15 1 views
7

저는 Solr에서 매우 새로 왔지만 PatternReplaceCharFilterFactory를 사용하여 저장할 전화 번호 문자열에 대한 사전 처리 작업을 수행하려고합니다. . 내가 (예 : 555.444.1234, (555) 444-1234, 5554441234, 4441234, 444-1234로 기대 내가 정규식을 테스트 한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.123.4444를 통과하면 555-123-4444가 StandardTokenizerFactory로 전달 될 것으로 예상됩니다. 거기에서 토큰 555,123,4444로 분류됩니다.

내가 얼마나 많은 시간을 보냈는지 확신 할 수없는 작은 구성 문제가 있지만 사용 가능한 문서 (내가 본 것)에서 그게 뭔지 전혀 모른다는 것을 확신합니다.

미리 감사드립니다. OK

+0

어쩌면 다른 사용자에게 더 유용하도록 질문에 일부 세부 정보를 추가 (편집) 할 수 있습니다. 대답을 자동 응답 할 수도 있습니다. – javanna

+0

@ javanna, 실제로 2 일 동안 내 대답을 자동 수락하지 않겠습니다. 편집하거나 대답하고 싶었는지 확실하지 않았습니다. 대답에 정착, 대기 기간이 끝나면 받아 들일 것입니다 – Jared

+0

위대한, 감사합니다! – javanna

답변

6

그래서 내가이 링크 Solr filters: PatternReplaceCharFilter 가로 질러 맨 아래에 온 또 하나의 '운'구글 검색 그들은 내가 설명 생각 고급 매개 변수에 대해 논의 후 알아 낸 더 나은 필터는 실제로 작동하는 방법 :

CharFilter는 단일 문자에서 작동하며 패턴 일치는 더 많은 문자를 읽으려면 내부 버퍼가 필요합니다. MaxBlockChars를 사용하면 버퍼 크기를 지정할 수 있습니다.

내 문제는 전체 문자열이 아닌 한 문자로 읽는 것입니다. 이것은 제가 본 삽화에 반대되는 내용이었습니다. 그래서 솔루션은 내 charFilter에 있었고 MaxBlockChar 속성을 추가하여 작동합니다. LucidImagination의 사이트 나 solr 위키에이 속성에 대한 언급이 없었습니다.

+0

재밌어, 필터 노드에 추가하려고 할 때'알 수없는 매개 변수 : {maxBlockChars = 10000}이 있습니다. –

+0

@TimBezhashvyly 이것은 solr 3.1에 대한 것이 었습니다. 기억한다면, 버전 6에서 변경되었을 가능성이 있습니다. – Jared

관련 문제