2010-06-30 9 views
5

Tengo un problema con la puntuación de rayas del índice de solr Cuando el signo de puntuación sigue justo después de una palabra, esta palabra no se indexa correctamente.Solr: puntuación de franja antes del índice

Por ejemplo: si indexamos "hola, Juan", el activo no se encontrará con la palabra clave "hola", mientras que no habrá ningún problema si eliminamos la palabra "hola" después de la palabra.

¿Hay alguna FilterFactory que suponen para pelar puntuacion? ¿Algunas ideas?

Gracias, Bogdan.

Respuesta

6

Esto se hace con el WordDelimiterFilterFactory. Establezca generateWordParts = 1.

También existe la PatternTokenizerFactory que podría ser utilizado, pero nunca he probado.

+0

Para las personas con casos extremos como el mío: Las generateWordParts = 1 trabajará normalmente, pero si está haciendo lo que estoy haciendo, no lo hará: estoy usando el atributo 'types' de WDFF para mapear. y $ a ALPHA, para que pueda hacer coincidir términos como '$ 10.00'. Esto tiene el efecto secundario negativo de causar que los períodos de prefijo y sufijo se incluyan como parte de la palabra. Entonces, en mi caso, la respuesta de @claytron puede ser una mejor opción. –

6

Puede utilizar el solr.PatternReplaceFilterFactory para despojar principio y puntuacion arrastrando con esto:

<filter class="solr.PatternReplaceFilterFactory" 
    pattern="^\p{Punct}*(.*?)\p{Punct}*$" 
    replacement="$1"/> 

Y si se quería despojar a todos los puntuacion al principio y al final, con la excepción (por ejemplo) el signo de dólar en frente de una palabra, se puede usar esto:

<filter class="solr.PatternReplaceFilterFactory" 
    pattern="^[\p{Punct}&&[^$]]*(.*?)\p{Punct}*$" 
    replacement="$1"/> 
+0

Creo que la edición de Mason cambió esta respuesta demasiado radicalmente. Debería haber agregado otra respuesta. – CorayThan

+0

@CorayThan ¿Cómo es demasiado radical un cambio? Pellizqué ligeramente la expresión regular en la respuesta original de claytron desde la captura de la puntuacion sólo para tirarlo adelante es innecesaria, y luego añadió un ejemplo de cómo ajustar aún más que la expresión regular si se quiere despojar a todos los puntuacion a excepción de un carácter específico ... algo eso podría ser bastante útil. Tampoco me parece una respuesta completamente diferente, por lo que no parece correcto publicarla como tal. –

0

uso PatternReplaceFilterFactory

<!-- remove punctuation --> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="^(\p{Punct}*)(.*?)(\p{Punct}*)$" replacement="$2"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
<filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 

...

Cuestiones relacionadas