La respuesta corta es porque la recuperación de texto no tiene casi nada en común con cómo se diseñan y usan las bases de datos tradicionales. Alguien que es un as en la creación / uso de un RDBMS es como un cordero al matadero cuando se acercan a la recuperación de texto por primera vez.
(Perdón por la larga respuesta, pero hoy estoy enfermo en la cama y no tengo nada más que hacer).
Lo siguiente podría entrar fácilmente en TL; DR, pero si tiene el tiempo y el interés, lo que sigue es una parte de la respuesta más larga. Nota: estoy hablando de haber implementado un sistema de recuperación de información comercial a partir de 1986. Fuimos un éxito técnico, pero un fracaso de marketing.
Hacer IR (recuperación de información) correctamente requiere que comience pensando en lo que está buscando y cómo lo encontrará utilizando su mecanismo de consulta. Esto puede sonar fácil, pero es todo menos fácil. Estas son solo algunas de las cosas que tendrá que decidir antes de comenzar a escanear sus documentos (o campos).
- ¿Importa el caso? ¿DoD es lo mismo que dod? ¿Qué tal "flame" y "FLAME" (una colonia basada en el Burger King Whopper (sí, de verdad)).
- ¿Qué tipo de tokens indexarás? Obviamente quieres indexar "papi". Probablemente quieras indexar "daddy123". ¿Quieres indexar "123"? "12.3"? "192.168.1.1"?
- ¿Cómo manejas cosas como la separación silábica? Un ejemplo algo desactualizado es "base de datos", "base de datos" y "base de datos", todos los cuales se utilizaron simultáneamente en 1986.
- Si su lenguaje de consulta admite el concepto de "Buscar A en la misma oración que B", ¿cómo determina los saltos de oración? A pesar de que '?' y '!' son bastante fáciles, esos son una perra. Piense en cosas como "Sr.", "2.", "etc.", etc.
- ¿Vas a apoyar la derivación? Si es así, ¿cuán cuidadoso será para no cambiar accidentalmente el POS (Parte del discurso)? Por ejemplo, "gatos" pueden derivar a "gato", pero los "ciegos" pueden o no ser "ciegos". Si se tratara de un verbo ("Él me ciega"), entonces puedes detenerlo, pero si fuera un sustantivo ("Me gustan tus ciegas") no puedes (o al menos no deberías). El tallo es muy seductor, pero Es un pantano de la Primera Orden.
- ¿Qué idiomas vas a admitir? Lo que funciona en inglés puede fallar mucho en francés o alemán, aunque, curiosamente, tenderá a funcionar bien para los japoneses en la representación de Hepburn Romanji .
Y la lista sigue y sigue ...
Luego tenemos que pensar en nuestro lenguaje de consulta. Puede parecer que si todo lo que va a admitir es simple booleano, entonces debería ser fácil, pero lo único que se acuerda universalmente es que el booleano puro apesta al texto. Por ejemplo, necesitará operadores adicionales para especificar el orden y la proximidad, y vaya, vaya, eso hace que la vida sea más complicada. También necesita saber en qué sección se encuentra: título, encabezado, cuerpo, etc., lo que conduce a todo tipo de diversión de análisis específica de la colección. Pero ahora ya no es suficiente tener una lista de tokens que ocurren en el documento, debes saber dóndeen el documento ocurren. Esto da como resultado una tupla de dirección de (docID, sectionID, para-in-section, oración-en-para, palabra-en-oración). Almacenar y buscar de manera eficiente esta información puede volverse complicado para una colección que no sea de juguete.
Luego está la estructura real de su almacén de datos. Los sistemas de texto normalmente se implementan como una "inversión completa" de los documentos. ¿Cuántos índices tiene el DB promedio? 10? 50? 500? En IR no es raro tener 5,000,000 o más índices, uno para cada token separado. Y cualquier ficha dada puede tener 1 instancia (por ejemplo, "narfle" o "garthok") o 10,000,000 de instancias (por ejemplo, "the"). Esto significa que todo tu método para crear y actualizar índices tiene que ser muy rápido o vas a hundirte en el pantano. Y todavía tiene muchos de los otros problemas que tiene una base de datos tradicional: administración de espacio en disco, recuperación de fallas, instantánea coherente de un sistema en ejecución, etc., etc.
Finalmente hay clasificación de resultados. Un conjunto de resultados sin clasificar de una consulta booleana en una gran colección es inútil para un humano. Puede ser útil para un programa, pero eso no era con lo que estaba tratando. Aunque nuestro sistema implementó Boolean, nuestro punto de venta fue que fuimos el primer sistema disponible comercialmente para admitir la búsqueda de similitudes , basado en el Coeficiente de coseno . La matemática y la lógica de este tipo de búsqueda (básicamente un producto de puntos normalizado del vector de consulta contra millones de vectores de documentos) requería enfoques radicalmente diferentes para la representación y el almacenamiento de datos que los booleanos, definitivamente no es algo disponible en su DB promedio.
Todo esto (y más) es la razón por la cual "recuperación de texto" y "base de datos" casi no pertenecen a la misma oración. Creo que sería mejor elegir una buena base de datos para sus necesidades "normales", y luego usar un sistema IR externo para indexar / buscar los "documentos" en su base de datos primaria.