Comment Lucene travail
Je voudrais savoir comment recherche lucene fonctionne si vite. Je ne trouve pas utile de docs sur le web. Si vous avez quoi que ce soit (à court de lucene code source) pour lire, faites le moi savoir.
Une requête de recherche de texte à l'aide de mysql5 de recherche de texte avec index dure environ 18 minutes dans mon cas. Une recherche lucene pour la même requête prend moins d'une seconde.
- Puis-je demander cette question pour être converti en un wiki de la communauté ? Lucene sonne comme une plate-forme maintenant.
Vous devez vous connecter pour publier un commentaire.
Lucene est une inversion de l'index de texte intégral. Cela signifie qu'il prend tous les documents, les divise en mots, puis génère un index pour chaque mot. Depuis que l'indice est une chaîne de caractères exacte-match, non ordonnée, il peut être extrêmement rapide. Hypothétiquement, un SQL non ordonnée index sur une
varchar
champ peut être tout aussi rapide, et en fait, je pense que vous trouverez les grandes bases de données peuvent faire une simple chaîne de l'égalité des requêtes très rapidement dans ce cas.Lucene ne pas optimiser pour le traitement des transactions. Lorsque vous ajoutez un document, il n'a pas besoin de s'assurer que les requêtes de voir instantanément. Et il n'a pas besoin d'optimiser les mises à jour des documents existants.
Cependant, à la fin de la journée, si vous voulez vraiment savoir, vous avez besoin pour lire la source. Les deux choses que vous faites référence sont open source, après tout.
Lucene crée un gros indice. L'index contient mot de l'id, le nombre de documents où le mot est présent, et la position du mot dans ces documents. Ainsi, lorsque vous donnez un seul mot de la requête, il fouille l'index (O(1) le temps de la complexité). Alors le résultat est classé à l'aide de différents algorithmes. Pour le multi-parole de requête, il suffit de prendre l'intersection de l'ensemble de fichiers où les mots sont présents.
Ainsi, Lucene est très très rapide.
Pour plus d'informations, lisez cet article par les développeurs de Google- http://infolab.stanford.edu/~backrub/google.html
En un mot: l'indexation.
Lucene crée un index de votre document qui permet de rechercher beaucoup plus rapidement.
C'est la même différence entre une liste de O(N) structure de données et d'une table de hachage O(1) structure de données. La liste a de marcher à travers l'ensemble de la collection pour trouver ce que vous voulez. La table de hachage est un indice qui permet de savoir exactement où l'élément souhaité est et simplement le chercher.
Mise à jour:
Je ne suis pas certain de ce que tu veux dire par "index Lucene, les recherches sont beaucoup plus rapide que mysql index de recherche."
Ma conjecture est que vous utilisez MySQL "OÙ le document LIKE '%phrase%'" à la recherche d'un document. Si cela est vrai, alors MySQL a faire une analyse de table sur chaque ligne, qui sera en O(N).
Lucene arrive à analyser le document en jetons, groupe en n-grammes à votre direction, et de calculer des indices pour chacune de celles-ci. Il est O(1) pour trouver un mot dans une indexé Lucene document.
Lucene fonctionne avec La fréquence des termes et Inverse de document de la fréquence. Il crée un index cartographie de chaque mot avec le document et c'est la fréquence de comptage qui n'est rien mais inverse de l'indice sur le document.
Lucene crée un index inversé quelque chose comme
Fichier 1 :
Durée : Aléatoire
Fréquence : 1
Position : 0
Terme : La Mémoire
Fréquence : 2
Position : 3
Position : 6
De sorte qu'il est capable de rechercher et de récupérer la recherche de contenu rapidement. Quand il y a trop de matches pour la requête de recherche, il affiche le résultat sur la base du poids. Examiner la requête de recherche "Mémoire Principale" il recherche tous les 4 mots individuellement et le résultat serait comme,
Principal
Fichier 1 : Fréquence - 1
Mémoire
Fichier 1 : Fréquence - 2
Fichier 2 : Fréquence - 1
Le résultat serait Fichier1 suivie par Fichier2. Pour arrêter de se laisser emporter par le poids sur les mots les plus communs comme 'et', 'ou', 'la' il estime que l'inverse document frequency (ie' il diminue le poids de la parole qui est le plus populaire parmi l'ensemble de documents).