2011-12-15 9 views
7

Quindi sono molto nuovo in Solr ma sto cercando di utilizzare il PatternReplaceCharFilterFactory per eseguire alcuni pre-elaborazione su una stringa di numero di telefono che verrà memorizzata. Ecco la configurazione per il campo:Solr PatternReplaceCharFilterFactory non in sostituzione con il modello specificato

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

Ho testato la regex e corrispondono a tutto quello che mi aspetterei a (ad esempio 555.444.1234, (555) 444-1234, 5.554.441,234 mila, 4.441.234, 444-1234. , eccetera).

Ora la mia comprensione è che la regex deve corrispondere a ciò che viene passato e sostituirla con il modello specificato. Quindi se mi hanno passato 555.123.4444 mi sarei aspettato che il risultato fosse 555-123-4444 da passare a StandardTokenizerFactory. Da lì verrebbe suddiviso in token 555,123,4444.

Dato quanto tempo ho speso per questo sono sicuro che c'è un piccolo problema di configurazione che mi manca ma dalla documentazione disponibile (che ho visto) non ho idea di cosa sia.

Grazie in anticipo.

+0

forse puoi aggiungere alcuni dettagli alla tua domanda (modificarla) per renderla più utile per gli altri utenti. Puoi anche accettare automaticamente la tua risposta. – javanna

+0

@javanna, In realtà non mi permette di accettare automaticamente la mia risposta per 2 giorni o lo farei. Non ero sicuro di voler modificare o rispondere. Ho deciso di rispondere, accetterò una volta che il periodo di attesa è finito – Jared

+0

Grande, grazie! – javanna

risposta

6

OK così ho pensato che dopo una piu 'fortunato' google search mi sono imbattuto in questo link Solr filters: PatternReplaceCharFilter e in fondo discutono parametri avanzati che credo spiega meglio come il filtro funziona realmente:

CharFilter opera su un singolo carattere e la corrispondenza del modello richiede un buffer interno per leggere più caratteri. MaxBlockChars consente di specificare la dimensione del buffer.

Il mio problema è che sta leggendo in un singolo carattere non l'intera stringa. Questo era contrario agli esempi che ho visto pubblicati. Quindi la soluzione era sul mio charFilter, ho aggiunto l'attributo MaxBlockChar e voilà funziona. Non c'è stata menzione di questo attributo sul sito di LucidImagination né sul solr wiki (che ho trovato).

+0

Divertente, ho ottenuto 'Parametri sconosciuti: {maxBlockChars = 10000} quando ho provato ad aggiungerlo a un nodo di filtro. –

+0

@TimBezhashvyly questo era per SOLR 3.1, se ricordo, è possibile che le cose siano cambiate come sono nella versione 6 – Jared

Problemi correlati