2011-12-15 10 views
7

Tak więc jestem bardzo nowy w Solr, ale próbuję użyć PatternReplaceCharFilterFactory do wykonania wstępnego przetwarzania na ciągu numerów telefonów, które będą przechowywane. Oto konfiguracja dla pola:Solr PatternReplaceCharFilterFactory nie zastępuje określonego wzorca

<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> 

Ja testowałem regex i pasuje do wszystkiego Spodziewam się go (np 555.444.1234 (555) 444-1234, 5554441234, 4441234, 444-1234. itp.).

Teraz rozumiem, że wyrażenie regularne powinno pasować do tego, co zostało mu przekazane i zastąpić je określonym wzorcem. Więc jeśli przekazali mi 555.123.4444, spodziewam się, że spowoduje to przekazanie 555-123-4444 do StandardTokenizerFactory. Stamtąd zostanie podzielony na żetony 555,123,4444.

Biorąc pod uwagę, ile czasu na to poświęciłem, jestem pewien, że jest mały problem z konfiguracją, którego mi brakuje, ale z dostępnej dokumentacji (którą widziałem) nie mam pojęcia, co to jest.

Z góry dziękuję.

+0

Może możesz dodać trochę szczegółów do swojego pytania (edycja), aby były bardziej przydatne dla innych użytkowników. Możesz nawet zautomatyzować swoją odpowiedź. – javanna

+0

@javanna, To tak naprawdę nie pozwala mi automatycznie zaakceptować mojej odpowiedzi przez 2 dni lub ja bym to zrobił. Nie byłem pewien, czy chcę edytować lub odpowiedzieć. Postanowiłem odpowiedzieć, zaakceptuję, gdy minie okres oczekiwania. – Jared

+0

Świetnie, dziękuję! – javanna

Odpowiedz

6

OK więc zorientowaliśmy się po jednej bardziej „szczęście” Wyszukiwarka Google natknąłem się na ten odnośnik Solr filters: PatternReplaceCharFilter i na samym dole omawiają zaawansowane parametry, które moim zdaniem lepiej wyjaśnia, w jaki sposób filtr faktycznie działa:

CharFilter działa na jednym znaku, a dopasowywanie wzorca wymaga wewnętrznego bufora, aby odczytać więcej znaków. MaxBlockChars pozwala określić rozmiar bufora.

Mój problem polega na tym, że czyta się w jednym znaku, a nie w całym ciągu znaków. Było to sprzeczne z przykładami, które zobaczyłem. Więc rozwiązanie było na moim charFilter Dodałem atrybut MaxBlockChar i voila to działa. Nie było żadnej wzmianki o tym atrybucie na stronie LucidImagination ani na wiki Solr (którą spotkałem).

+0

Zabawne, Mam 'Nieznane parametry: {maxBlockChars = 10000}, gdy próbowałem dodać go do węzła filtru. –

+0

@ TimBezhashvyly to było dla Solr 3.1, jeśli pamiętam, możliwe, że rzeczy się zmieniły, ponieważ są one w wersji 6 – Jared

Powiązane problemy