2011-12-15 8 views
7

Soy muy nuevo en Solr pero estoy tratando de usar PatternReplaceCharFilterFactory para hacer un preprocesamiento en una cadena de número de teléfono que se almacenará. Aquí está la configuración para el campo:Solr PatternReplaceCharFilterFactory no reemplaza con el patrón especificado

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

He probado la expresión regular y que coincide con todo lo que cabe esperar que (por ejemplo, 555.444.1234, (555) 444 a 1234, 5554441234, 4441234, 444 a 1.234. , etc.)

Ahora entiendo que la expresión regular debe coincidir con lo que se le pase y reemplazarla por el patrón especificado. Entonces, si me pasaran 555.123.4444, esperaría que el resultado fuera 555-123-4444 para pasar a StandardTokenizerFactory. A partir de ahí se descompondría en tokens 555,123,4444.

Dado cuánto tiempo he pasado en esto estoy seguro de que hay un pequeño problema de configuración que me falta, pero de la documentación disponible (que he visto) no tengo ni idea de qué se trata.

Gracias de antemano.

+0

quizás pueda agregar algunos detalles a su pregunta (editarla) para que sea más útil para otros usuarios. Incluso puede autoaceptar su respuesta. – javanna

+0

@javanna, en realidad no me deja aceptar mi respuesta automáticamente por 2 días o lo haría. No estaba seguro de si quería editar o responder. Me conformé con la respuesta, la aceptaré una vez que el período de espera haya terminado – Jared

+0

¡Genial, gracias! – javanna

Respuesta

6

Aceptar lo que he descubierto después de que uno más 'suerte' búsqueda de Google me encontré con este enlace Solr filters: PatternReplaceCharFilter y en la parte inferior discuten parámetros avanzados que creo que explica mejor cómo el filtro funciona realmente:

CharFilter funciona con un solo carácter, y la coincidencia de patrones requiere un búfer interno para leer más caracteres. MaxBlockChars le permite especificar el tamaño del búfer.

Mi problema es que está leyendo en un solo carácter, no toda la cadena. Esto fue contrario a los ejemplos que vi publicados. Entonces, la solución estaba en mi charFilter. Agregué el atributo MaxBlockChar y listo. No se mencionó este atributo en el sitio de LucidImagination ni en la wiki de Solr (que encontré).

+0

Es curioso, obtuve 'Parámetros desconocidos: {maxBlockChars = 10000} cuando intenté agregarlo a un nodo de filtro. –

+0

@TimBezhashvyly esto fue para solr 3.1, si mal no recuerdo, es posible que las cosas hayan cambiado, ya que están en la versión 6 – Jared

Cuestiones relacionadas