2010-06-11 21 views
5

estoy usando SOLR junto con NGramTokenizerFactory para ayudar a crear fichas de búsqueda de subcadenas de palabrasBúsqueda de palabras cortas con SOLR

NGramTokenizer está configurado con una longitud mínima palabra de 3

Esto significa que puedo buscar p.ej "unb" y luego coincide con la palabra "increíble".

Sin embargo, tengo un problema con las palabras cortas como "I" y "in". Estos no están indexados por SOLR (sospecho que es debido a NGramTokenizer) y, por lo tanto, no puedo buscarlos.

No quiero reducir la longitud de palabra mínima a 1 o 2, ya que esto crea un gran índice de búsqueda. Pero me gustaría que SOLR incluya palabras completas cuya longitud ya está por debajo de este mínimo.

¿Cómo puedo hacer eso?

/Carsten

Respuesta

6

En primer lugar, tratar de entender por qué sus palabras no la indexación por Solr utilizando la "Herramienta de análisis"

http://localhost:8080/solr/admin/analysis.jsp 

Sólo hay que poner el campo y el texto que está buscando para ver qué analizador está filtrando a corto plazo. Te sugiero que lo hagas porque dijiste que solo tienes un "sospechoso" y tienes que estar seguro de qué analizador filtra tus datos.

¿Entonces por qué no simplemente copia el término en otro campo sin ese analizador?

De esta manera, sus términos se indexarán dos veces, y aparecerán tanto como palabra exacta como n-grama. Luego debe lidiar con los puntajes de los dos campos diferentes.

Espero que esto te haya ayudado de alguna manera.

Algunos de enlace para la agregación y copyfield atributo:

Indexing data in multiple fields

Using copy field tag

+1

Gracias por su sugerencia. He corrido el análisis contra dos palabras: un caso normal - "jeudan" y la palabra de 1 letra "j". Aquí están los resultados http://pastie.org/1000520 Como puede ver, ES realmente el NGramTokenizer el que está filtrando la palabra de 1 letra, o en este el EdgeNGramTokenizer, pero lo he probado con ambos. Podría intentar lo que sugieras, pero preferiría que Solr hiciera todo el trabajo de texto. Hago muchas búsquedas específicas de campo, por lo que su sugerencia resultaría en la necesidad de reescribir esas consultas para buscar en dos campos de texto en lugar de uno. Posible pero contra-intuitivo. –

+1

Considere que es típico en solr tener un campo de agregación donde realiza la consulta, y luego una serie de campos con diferentes tipos y analizador. Simplemente use la etiqueta copyfield para copiar todo su campo fuente al destino. No tiene que cambiar sus consultas. –

+1

Bueno, tu respuesta en realidad resolvió este y otros problemas que tuve que enfrentar. No sabía sobre la herramienta de análisis. Terminé probando algunos otros filtros y tokenizadores a través del analizador, y terminé usando PhoneticFilter tanto en el índice como en la parte de consulta. Muy limpio, ¡muchas gracias! –

Cuestiones relacionadas