J'essaie de développer un moteur de recherche textuel complexe. J'ai des milliers de pages textuelles tirées de nombreux livres. Je dois rechercher des pages qui contiennent des critères logiques complexes spécifiés. Ces critères peuvent contenir pratiquement n'importe quelle combinaison de ce qui suit:SQL avec des expressions régulières vs des index avec des fonctions de fusion logiques
A: Mots complets. B: Racines de mots (semilaires à tiges, c'est-à-dire tous les mots avec certaines lettres clés). C: Modèles Word (dans certaines langues, les racines sont remplies dans certains modèles pour former différentes parties de la parole, telles que les adjacents, les verbes passés/présents ...). D: Connecteurs logiques: AND/OR/XOR/NOT/IF/IFF et parenthèses aux priorités d'état.
Maintenant, serait-il plus rapide d'avoir le texte intégral des pages dans la base de données (non indexé) et de les parcourir toutes en utilisant SQL et les expressions rationnelles?
Ou serait-il préférable de construire des index de tuples word/root/template-page-location. Par conséquent, nous pouvons stimuler la recherche de mots/racines/modèles individuels. Cependant, cela devient difficile car nous introduisons des connecteurs logiques dans nos requêtes. J'ai pensé à faire les étapes suivantes dans de tels cas:
1: Rechercher séparément chaque mot/racine/modèle dans la requête spécifiée.
2: Sur les bases prioritaires, nous fusionnons deux listes de résultats (de l'étape 1) à un moment depedning sur le conjonctifs logique
Par exemple, si nous recherchons « lui et (est ou était) »: 1: Nous allons chercher "he", "is" et "was" séparément et obtenir des listes de résultats pour chaque mot. 2: Fusionner les listes de résultats de "is" et "was" en utilisant la fonction de fusion OR-MERGE.
3: Fusionner la liste des résultats fusionnés de la fonction OR-MERGE avec celle de "he" en utilisant la fonction de fusion AND-MERGE.
Le résultat de l'étape 3 est ensuite renvoyé comme résultat de la requête spécifiée.
Que pensez-vous des gurues? Lequel est plus vite ? De meilleures idées?
Merci d'avance.
Merci de votre temps pour répondre à mes Q.J'ai trouvé qu'il était possible d'utiliser BerkeleyDB d'Oracle avec des fonctions de fusion de performance de recherche binaire. Ma décision était due à la complexité du soutien nécessaire pour la langue arabe qui n'est pas couvert par les DB de texte intégral autant que je pourrais faire de la recherche. – geeko