2010-12-23 32 views
8

Estoy escribiendo una aplicación de formato C# para un sistema de archivo. El sistema tiene una gran base de datos donde algunas tablas tendrían más de 1.5 millones de registros. Lo que necesito es un algoritmo que indexe el contenido de estos registros. Principalmente, los archivos son documentos de Microsoft office, PDF y TXT. alguien puede ayudar? ya sea con ideas, enlaces, libros o códigos, lo agradezco :)Algoritmo de indexación de texto

ejemplo: si busco la palabra "internacional" en una determinada carpeta en la base de datos, obtengo todos los archivos que contienen esa palabra ordenada por un ciertos criterios como relevancia, fecha de modificación ... etc.

+1

¿Por qué no utilizaría las herramientas de indexación de su base de datos para hacer esto en lugar de crear uno usted mismo? –

+0

¿Desea indexar cada palabra en cada documento, o solo un resumen/metadatos sobre el documento? –

+0

@OJ: Quiero indexar el contenido de los archivos y no sus títulos :) – Majd

Respuesta

8

Necesita crear lo que se conoce como un índice invertido, que es el núcleo de cómo funcionan los motores de búsqueda (al estilo de Google). Apache Lucene es posiblemente la mejor biblioteca para la indexación invertida. Tienes 2 opciones:

  1. Lucene.net - un puerto NET de la biblioteca de Java Lucene.

  2. Apache Solr - un servidor de búsqueda desarrollado con las librerías Lucene y fácilmente integrable en su aplicación .NET porque tiene una API RESTful. Se suministra de fábrica con varias funciones como almacenamiento en memoria caché, escalado, revisión de ortografía, etc. Puede facilitar la vida de la interacción de aplicación a Sol mediante la excelente biblioteca SolrNet.

  3. Apache Tika ofrece un conjunto de herramientas de extracción de datos/metadatos muy completo que trabaja con archivos PDF, HTML, documentos de MS Office, etc. Una opción más sencilla sería la API IFilter. Vea el artículo this para más detalles.

+0

Sí, lo tienes bien con el índice invertido :) voy a dar estos bibliotecas una mirada, thx \ m / – Majd

1

Parece que se necesitan dos cosas. En primer lugar, necesita un sistema que realmente realice la indexación. Para esto, puedes usar Lucene o Apache Solr como mencionó Mikos. También es posible que desee comprobar Sphinx, que es otro motor de búsqueda de texto completo. También podría usar las funciones de texto completo integradas en su base de datos. Tanto SQL Server como MySQL tienen capacidades de indexación de texto completo. Como lo hacen muchas otras bases de datos. Lo segundo que necesita es una forma de sacar el texto de los archivos. Para cosas como archivos txt y archivos HTML, esto es fácil porque la mayoría de los motores de búsqueda de texto completo los aceptan como texto normal. Para documentos binarios más complicados como MS Word o PDF, tendrá que encontrar otra forma de obtener el texto de ellos.

0

Según mi opinión, realice una partición de tabla, indexe las tablas con los id y luego realice la búsqueda.

Cuestiones relacionadas