2010-12-08 7 views
6

Estaba revisando todas las preguntas existentes pero no pude obtener algo muy relevante.Lucene Fuzzy Buscar los nombres de los clientes y la dirección parcial

Tengo un archivo con millones de registros de nombre de persona, apellido, dirección1, dirección2, código de país, fecha de nacimiento - Me gustaría consultar mi lista de clientes con el archivo anterior a diario (mi lista de clientes también actualizarse diariamente y el archivo también se actualiza diariamente).

Para nombre y apellido Me gustaría la coincidencia difusa (puede ser la distancia de lucene fuzzyquery/levenshtein 90% coincidente) y para los campos restantes país y fecha de nacimiento Quería la coincidencia exacta.

Soy nuevo en Lucene, pero al mirar el número de publicaciones, parece que es posible.

Mis preguntas son:

  • Como deberia índice de mi archivo de entrada? Necesito construir un índice sobre la combinación de FN, LN, país, fecha de nacimiento y usar el índice de búsqueda
  • ¿Cómo puedo usar la consulta difusa de Lucene aquí?

¿Hay alguna otra manera en que pueda implementar lo mismo?

Respuesta

4

Rushik, aquí están algunas ideas:

  • considerar el uso de Solr. Es mucho más fácil comenzar a usarlo, en lugar de descubrir Lucene.
  • Genera un índice Lucene/Solr del archivo. Parece que un documento por cliente es suficiente si utiliza un campo de valores múltiples o dos campos diferentes para las direcciones.
  • ¿Tiene una identificación única por persona? Para usar Solr, necesitas uno. En Lucene, puedes escapar sin usar una identificación única.
  • Guarde el código de país como una "palabra clave". Si solo requiere una coincidencia exacta para la fecha de nacimiento, puede hacer lo mismo. Para las consultas de rango, necesitará otra representación.
  • Supongo que su lista de clientes es más pequeña que el archivo. Una política posible sería indexar diariamente los cambios en el archivo (Aquí, una identificación única es realmente útil; de lo contrario, debe eliminar por consulta, lo que puede pasar por alto la marca). Luego puede optimizar el índice y luego realizar una búsqueda de su lista de clientes actualizada.
  • Lo que usted describe es un BooleanQuery, cuyas cláusulas son consultas borrosas para los nombres y apellidos y consultas de términos para los otros campos. Puede crear la consulta programáticamente o usando el query parser.
  • Considere el uso de soundex para nombres como se describe here.
+0

Gracias Yuval, sí tengo identificador único por persona en el archivo Por lo tanto, debería ser bueno. la lista de clientes es mucho más pequeña que el archivo de persona. Intentaré resolver esto y regresaré. – Rushik

2

Algunos trabajos académicos sobre este tema son bien vale la pena leer (google para los archivos PDF gratis):

  • Una comparación de la coincidencia de nombres personales: Técnicas y Cuestiones prácticas (2006)
  • general del Registro Direcciones de investigación en curso (2006)
  • Un Sistema de Enlace de datos en paralelo de código abierto y vinculación (2004)

también debe c onsidere las siguientes bibliotecas/marcos:

(respondida para futuros visitantes.)

Cuestiones relacionadas