2010-03-11 13 views
5

Estoy indexando una fila de datos de la base de datos en Lucene.Net. Una fila es equivalente a Documento.¿Cómo puedo obtener DocId cuando agrego un documento en el índice Lucene?

Quiero actualizar mi base de datos con el DocId, de modo que pueda usar el DocId en los resultados para poder recuperar filas rápidamente.

Actualmente, primero recupero el PK de los documentos de resultados, lo que creo que debería ser más lento que recuperarlo directamente de la base de datos usando DocId.

¿Cómo puedo encontrar el DocId al agregar un documento a Lucene?

Respuesta

2

Como dijo Yuval, la filtración de los detalles internos de la implementación de Lucene es mala, especialmente debido a que la identificación del documento de Lucene cambia cuando el índice está mutado.

Si busca la clave principal con doc.get ("pk") es demasiado lenta para usted, use un FieldCache para almacenar en memoria caché todos los pk's en la memoria. Entonces las búsquedas serán bastante rápidas.

+0

¿Cualquier fragmento de código de muestra para usar FieldCache? – Rohit

+0

Acepto que depender de la identidad del documento casi siempre es un diseño deficiente. Sin embargo, tengo un caso de uso particular en el que tengo un índice de solo lectura y necesito hacer algo de procesamiento fuera de lo posible con una consulta de búsqueda, así que debo almacenar la id del documento de ciertos documentos para referencia posterior. ¿Puede explicar más sobre el uso de FieldCache para hacerlo? – Lyle

3

Confiar en el DocId de Lucene es una mala política, ya que incluso Lucene intenta evitar esto. Te sugiero que crees tu propio DocId. En una base de datos usaría un auto-increment field. Si su aplicación no utiliza una base de datos relacional, puede crear este tipo de campo mediante programación. Aparte de eso, sugiero que lea Search Engine versus DBMS - Creo que solo los campos que se pueden buscar deben almacenarse en Lucene; El resto de la fila pertenece a una base de datos, por lo que la secuencia de eventos es:

  1. Usando Lucene, busque texto y obtenga un DocId.
  2. Use DocId para recuperar la fila completa de la base de datos.
Cuestiones relacionadas