sql >> Base de Datos >  >> RDS >> Sqlserver

Configurar Lucene.Net con SQL Server

Sí, lo he usado exactamente para lo que estás describiendo. Teníamos dos servicios:uno para leer y otro para escribir, pero solo porque teníamos varios lectores. Estoy seguro de que podríamos haberlo hecho con un solo servicio (el escritor) e incrustado el lector en la aplicación web y los servicios.

Usé lucene.net como un indexador de base de datos general, por lo que lo que obtuve fue básicamente ID de base de datos (para mensajes de correo electrónico indexados), y también lo usé para obtener suficiente información para completar los resultados de búsqueda sin tocar el base de datos. Funcionó muy bien en ambos casos, aunque el SQL puede volverse un poco lento, ya que prácticamente tiene que obtener una ID, seleccionar una ID, etc. Solucionamos esto creando una tabla temporal (con solo la fila de ID) y inserción masiva desde un archivo (que fue el resultado de lucene) y luego unirse a la tabla de mensajes. Fue mucho más rápido.

Lucene no es perfecto, y tienes que pensar un poco fuera de la caja de la base de datos relacional, porque TOTALMENTE no lo es, pero es muy, muy bueno en lo que hace. Vale la pena echarle un vistazo y, según me dijeron, no tiene los problemas de "vaya, lo siento, necesita reconstruir su índice de nuevo" que sí tiene FTI de MS SQL.

Por cierto, lidiamos con 20-50 millones de correos electrónicos (y alrededor de 1 millón de archivos adjuntos únicos), lo que totaliza alrededor de 20 GB de índice lucene, creo, y más de 250 GB de base de datos SQL + archivos adjuntos.

El rendimiento fue fantástico, por decir lo menos, solo asegúrese de pensar y modificar sus factores de fusión (cuando fusiona segmentos de índice). No hay problema en tener más de un segmento, pero puede haber un GRAN problema si intenta fusionar dos segmentos que tienen 1 mil elementos en cada uno, y tiene un hilo de vigilancia que mata el proceso si tarda demasiado... .. (sí, eso nos pateó el trasero por un tiempo). Así que mantenga el número máximo de documentos por cosa BAJO (es decir, ¡no lo configure al máximo como lo hicimos nosotros!)

EDITAR Corey Trager documentó cómo usar Lucene.NET en BugTracker.NET aquí.