Comment fonctionne Lucene
Je voudrais savoir comment recherche lucene fonctionne si vite. Je ne trouve aucun document utile sur le web. Si vous avez quelque chose (à court de code source lucene) à lire, faites le moi savoir.
Une requête de recherche de texte utilisant la recherche de texte mysql5 avec index prend environ 18 minutes dans mon cas. Une recherche lucene pour la même requête prend moins d'une seconde.
4 réponses
Lucene est un index en texte intégral inversé. Cela signifie qu'il prend tous les documents, les divise en mots, puis génère un index pour chaque mot - . Puisque l'index est une correspondance de chaîne exacte, non ordonnée, il peut être extrêmement rapide. Hypothétiquement, un index SQL non ordonné sur un champ varchar
pourrait être tout aussi rapide, et en fait je pense que vous trouverez que les grandes bases de données peuvent faire une simple requête d'égalité de chaîne très rapidement dans ce cas.
Lucene n'a pas besoin d'optimiser pour la transaction traitement. Lorsque vous ajoutez un document, il n'est pas nécessaire de s'assurer que les requêtes le voient 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 référencez sont open source, après tout.
Lucene crée un grand index. L'index contient word id, le nombre de documents où le mot est présent, et la position du mot dans ces documents. Donc, lorsque vous donnez une seule requête de mot, il recherche simplement l'index (O (1) complexité temporelle). Ensuite, le résultat est classé en utilisant différents algorithmes. Pour une requête multi-mots, il suffit de prendre l'intersection de l'ensemble des fichiers où les mots sont présents. Ainsi Lucene est très très rapide.
Pour plus d'informations, lisez cet article de Google developers- http://infolab.stanford.edu/~backrub/google.html
En un mot: 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 structure de données list O(N) et une structure de données hash table O(1). La liste doit parcourir toute la collection pour trouver ce que vous voulez. La table de hachage a un index qui lui permet de déterminer exactement où se trouve l'élément désiré et de le récupérer simplement.
Mise à jour:
Je ne suis pas certain de ce que vous entendez par " indice Lucene les recherches sont beaucoup plus rapides que les recherches d'index mysql."
Je suppose que vous utilisez MySQL "WHERE document LIKE' % phrase% '" pour rechercher un document. Si c'est vrai, alors MySQL doit faire une analyse de table sur chaque ligne, qui sera O(N).
Lucene peut analyser le document en jetons, les regrouper en n-grammes à votre direction, et calculer des index pour chacun d'entre eux. C'est O(1) pour trouver un mot dans un document Lucene indexé.
Lucene fonctionne avec Fréquence du terme et fréquence du document Inverse. Il crée un index mappant chaque mot avec le document et son nombre de fréquences qui n'est rien d'autre qu'un index inverse sur le document.
Exemple :
Fichier 1: la mémoire à accès aléatoire est la mémoire principale.
Fichier 2: les disques durs sont une mémoire secondaire.
Lucene crée un index inverse quelque chose comme
Fichier 1 :
Terme : Aléatoire
Fréquence : 1
Position: 0
Terme : La Mémoire
Fréquence : 2
Position: 3
Position: 6
Il est donc capable de rechercher et de récupérer le contenu recherché rapidement. Lorsqu'il y a trop de correspondances pour la requête de recherche, le résultat est généré en fonction du poids. Considérez la requête de recherche "mémoire principale" elle recherche 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 les poids sur les mots les plus courants comme 'et', 'ou', ' le 'il considère la fréquence inverse du document (c'est-à-dire' il diminue le poids du mot qui est le plus populaire parmi l'ensemble de documents).