A resposta curta é porque a recuperação de texto não tem quase nada em comum com a maneira como os bancos de dados tradicionais são projetados e usados. Alguém que é um craque na criação / uso de um RDBMS é como um cordeiro no matadouro quando se aproxima da recuperação de texto pela primeira vez.
(Desculpe pela resposta longa, mas hoje estou doente na cama e não tenho mais nada a fazer.)
O seguinte pode vir facilmente em TL; DR, mas se você tiver tempo e interesse, o que se segue é uma parte da resposta mais longa. Nota: Estou falando de ter implementado um sistema de recuperação de informações comerciais a partir de 1986. Fomos um sucesso técnico, mas um fracasso de marketing.
A execução correta do IR (Recuperação de informações) exige que você comece pensando no que está procurando e como o encontrará usando seu mecanismo de consulta. Isso pode parecer fácil, mas é tudo menos fácil. Aqui estão apenas algumas das coisas que você terá que decidir antes mesmo de começar a digitalizar seus documentos (ou campos).
- O caso importa? DoD é o mesmo que Dod? Que tal "chama" e "chama" (uma colônia baseada no Burger King Whopper (sim, na verdade)).
- Quais tipos de tokens você indexará? Você obviamente deseja indexar "papai". Você provavelmente deseja indexar "daddy123". Deseja indexar "123"? "12,3"? "192.168.1.1"?
- Como você lida com coisas como hifenização? Um exemplo um pouco desatualizado é "banco de dados", "banco de dados" e "banco de dados", que estavam em uso simultaneamente em 1986.
- Se o seu idioma de consulta suportar o conceito de "Localizar A na mesma frase que B", como você determina as quebras de frase? Apesar '?' e '!' são fáceis o suficiente, esses '.'s são uma cadela. Pense em coisas como "Sr.", "2.", "etc." etc.
- Você vai apoiar o stemming? Em caso afirmativo, qual o seu cuidado para não alterar acidentalmente o POS (parte do discurso)? Por exemplo, "gatos" podem resultar em "gato", mas "persianas" podem ou não resultar em "cegos". Se fosse um verbo ("Ele me cega"), então você pode conter, mas se for um substantivo ("Eu gosto de suas cortinas), você não pode (ou pelo menos não deveria). é um pântano da Primeira Ordem.
- Quais idiomas você vai apoiar? O que funciona em inglês pode falhar bastante em francês ou alemão, embora, estranhamente, ele tende a funcionar bem para o japonês na representação de Hepburn Romanji .
E a lista continua.
Então temos que pensar na nossa linguagem de consulta. Pode parecer que, se tudo o que você vai apoiar é booleano simples, deve ser fácil, mas a única coisa que é universalmente aceita é que o booleano puro é uma merda de texto. Por exemplo, você precisará de operadores adicionais para especificar pedidos e proximidade, e, oh, garoto, isso torna a vida ainda mais complicada. Você também precisa saber em qual seção você está - título, cabeçalho, corpo etc. - o que leva a todo tipo de diversão de análise específica da coleção. Mas agora não é mais suficiente apenas ter uma lista de tokens que ocorrem no documento, você precisa saber ondeno documento que eles ocorrem. Isso resulta em uma tupla de endereço de (docID, sectionID, para-na-seção, frase-para-para, palavra-na-frase). Armazenar e pesquisar com eficiência essas informações pode tornar-se complicado para uma coleção que não seja de brinquedos.
Depois, há a estrutura real do seu armazenamento de dados. Os sistemas de texto são normalmente implementados como uma "inversão total" dos documentos. Quantos índices o DB médio possui? 10? 50? 500? Em RI, não é incomum ter 5.000.000 ou mais índices, um para cada token separado. E qualquer token fornecido pode ter 1 instância (por exemplo, "narfle" ou "garthok") ou 10.000.000 instâncias (por exemplo, "the"). Isso significa que todo o seu método para criar e atualizar índices deve ser extremamente rápido ou você vai afundar no pântano. E você ainda tem muitos dos outros problemas que um banco de dados tradicional apresenta: gerenciamento de espaço em disco, recuperação de falhas, instantâneo coerente de um sistema em execução, etc., etc.
Finalmente, há classificação de resultados. Um conjunto de resultados sem classificação de uma consulta booleana em uma grande coleção é inútil para um humano. Pode ser útil para um programa, mas não era com isso que eu estava lidando. Embora nosso sistema tenha implementado booleano, nosso ponto de venda foi que fomos o primeiro sistema comercialmente disponível a oferecer suporte à pesquisa de similaridade , com base no coeficiente cosseno . A matemática e a lógica desse tipo de pesquisa (basicamente um produto escalar normalizado do vetor de consulta em relação a milhões de vetores de documentos) exigiam abordagens radicalmente diferentes para representação e armazenamento de dados do que o Booleano - definitivamente não há algo disponível em seu banco de dados médio.
Tudo isso (e mais) é por que "recuperação de texto" e "banco de dados" quase não pertencem à mesma frase juntos. Eu acho que seria melhor escolher um bom banco de dados para suas necessidades "normais" e depois usar um sistema de RI externo para indexar / pesquisar os "documentos" no seu banco de dados primário.