index fulltext full example against algorithm search full-text-search scalability

algorithm - fulltext - Búsqueda rápida de texto en los registros



php mysql full text search (6)

Es posible que desee verificar la fuente de BSD grep . Es posible que no pueda confiar en que grep estará a su lado, pero nada dice que no pueda recrear una funcionalidad similar, ¿verdad?

Este es el problema que tengo, tengo un conjunto de registros que pueden crecer bastante rápido. Se dividen en archivos individuales todos los días, y los archivos pueden crecer fácilmente en un concierto de tamaño. Para ayudar a mantener el tamaño reducido, las entradas de más de 30 días se borran.

El problema es cuando quiero buscar estos archivos para una cierta cadena. En este momento, una búsqueda de Boyer-Moore es irrealmente lenta. Sé que las aplicaciones como dtSearch pueden proporcionar una búsqueda realmente rápida mediante la indexación, pero no estoy seguro de cómo implementar eso sin ocupar el doble del espacio que un registro ya ocupa.

¿Hay algún recurso que pueda verificar que pueda ayudar? Realmente estoy buscando un algoritmo estándar que explique lo que debo hacer para construir un índice y usarlo para buscar.

Editar:
Grep no funcionará, ya que esta búsqueda debe integrarse en una aplicación multiplataforma. No hay forma de que pueda cambiar, incluyendo cualquier programa externo.

La forma en que funciona es que hay una interfaz web que tiene un navegador de registro. Esto habla con un backend de servidor web C ++ personalizado. Este servidor necesita buscar los registros en un tiempo razonable. Actualmente, la búsqueda a través de varios conciertos de registros demora años.

Edición 2: Algunas de estas sugerencias son excelentes, pero tengo que reiterar que no puedo integrar otra aplicación, es parte del contrato. Pero para responder algunas preguntas, los datos en los registros varían entre mensajes recibidos en un formato específico de atención médica o mensajes relacionados con estos. Estoy buscando confiar en un índice porque aunque puede llevar hasta un minuto reconstruir el índice, actualmente la búsqueda lleva mucho tiempo (lo he visto demorar hasta 2.5 minutos). Además, muchos datos se descartan incluso antes de grabarlos. A menos que algunas opciones de registro de depuración estén activadas, más de la mitad de los mensajes de registro se ignoran.

La búsqueda básicamente es la siguiente: un usuario en el formulario web se presenta con una lista de los mensajes más recientes (transmitidos desde el disco mientras se desplazan, yay para ajax), generalmente, querrán buscar mensajes con alguna información en es posible que sea una identificación del paciente o alguna cadena que hayan enviado, y así pueden ingresar la cadena en la búsqueda. La búsqueda se envía de forma asíncrona y el servidor web personalizado busca linealmente a través de los registros 1 MB a la vez para obtener algunos resultados. Este proceso puede llevar mucho tiempo cuando los registros crecen. Y es lo que estoy tratando de optimizar.


Más detalles sobre el tipo de búsqueda que está realizando definitivamente podrían ayudar. ¿Por qué, en particular, desea confiar en un índice, ya que tendrá que reconstruirlo todos los días cuando los registros vuelcan? ¿Qué tipo de información se encuentra en estos registros? ¿Puede descartarse algo antes de que se grabe siquiera?

¿Cuánto tiempo llevan estas búsquedas ahora?


Mira los algoritmos que Lucene usa para hacer su trabajo. Sin embargo, no es probable que sean muy simples. Tuve que estudiar algunos de estos algoritmos de vez en cuando, y algunos de ellos son muy sofisticados.

Si puede identificar las "palabras" en el texto que desea indexar, solo cree una gran tabla hash de las palabras que correlaciona un hash de la palabra con sus ocurrencias en cada archivo. Si los usuarios repiten la misma búsqueda con frecuencia, guardan en caché los resultados de la búsqueda. Cuando se realiza una búsqueda, puede verificar cada ubicación para confirmar que el término de búsqueda aparece allí, en lugar de solo una palabra con un hash coincidente.

Además, ¿a quién le importa realmente si el índice es más grande que los propios archivos? Si tu sistema es realmente tan grande, con tanta actividad, ¿hay algunas docenas de conciertos para un índice del fin del mundo?


Splunk es ideal para buscar en muchos registros. Puede ser excesivo para su propósito. Usted paga según la cantidad de datos (tamaño de los registros) que desea procesar. Estoy bastante seguro de que tienen una API para que no tengas que usar su front-end si no quieres.


grep generalmente funciona bastante bien para mí con grandes registros (a veces 12G +). Aquí también puede encontrar una versión para Windows.