2009-07-27 8 views
5

Tengo un campo de empresa en el Índice Lucene. Uno de los nombres de compañía indexados es: Moody'sAlmacenamiento de palabras con un apóstrofo en el índice Lucene

Cuando el usuario escribe en cualquiera de las siguientes palabras clave, quiero que esta empresa aparezca en los resultados de búsqueda. 1.Moo 2.Mood 3.Moodys de 4.Moody

¿Cómo debo almacenar este índice de Lucene y qué tipo de consulta de Lucene debo usar para obtener este comportamiento?

Gracias.

+0

La respuesta depende de la forma en que desee que se construya el resto de su índice: 1. ¿Se debe representar la pluralización? es decir, ¿son distintas las "manzanas" y las "manzanas"? 2. ¿Desea mantener los apóstrofos o pueden borrarse? 3. ¿El nombre de una compañía aparece aislado o dentro de un campo más grande? –

+0

gracias por ur comentarios ... mi respuesta 1.No 2.He quieren Lucene no mantener apóstrofes nombre 3.Company pueden aparecer isolted, así como en un campo más grande – Jimmy

Respuesta

9

Sobre la base de sus aclaraciones, quiero dividir la pregunta en dos, y contestar a cada uno de ellos:

  1. Cómo hacer palabras de E índice con apóstrofes como equivalentes a palabras similares sin un apóstrofe? p.ej. mapeo Moodys y Moody de al mismo término índice.
  2. ¿Cómo implemento la búsqueda de autocompletado en Lucene? Es decir, dado un índice, encuentre documentos usando prefijos de palabras, p. Ej. Mapa MOO a Moodys?

1 es relativamente fácil - Utilice un StandardToeknizer para crear un símbolo que combina el apóstrofe y s con la palabra anterior, a continuación, un StandardFilter para eliminar el apóstrofe y s. Esto convertirá Moody's a Moody. A StandardAnalyzer hace esto y mucho más (minúsculas y eliminación de palabras para detener), que puede ser más de lo que necesita. El uso de un analizador lingüístico debería tomar tanto Moodys y Moody a la misma razón. Pruebe SnowBallFilter para esto.

2 es más difícil: PrefixQuery de Lucene, a la que aludió Alan, solo funcionará cuando el nombre de la empresa sea la primera palabra en un campo. Necesita algo como la respuesta al this question about auto-complete in Lucene.

1

El StandardAnalyser debe trabajar para 3 y 4, sin embargo, no funcionará durante 1 y 2.

Sin escribir su propio analizador de texto (complejo), me gustaría pensar acerca de cómo se está esperando a ser nombres de empresas buscado para. Por ejemplo, la sintaxis de búsqueda de lucene básica significa que puede encontrar "Moody's" si busca usando comodines: "Moo *" y "Mood *". Por lo tanto, es posible que desee considerar agregar un "*" al término de búsqueda antes de enviar a lucene, sin embargo, esto podría causar cierta confusión si el usuario no está enterado de esta adición de comodín bajo el capó.

Cuestiones relacionadas