2008-09-17 7 views
3

J'ai utilisé le (Java) Highlighter for Lucene (dans le paquet Sandbox) depuis un certain temps. Cependant, ce n'est pas vraiment très précis quand il s'agit de faire correspondre les termes corrects dans les résultats de recherche - cela fonctionne bien pour les requêtes simples, par exemple la recherche de deux mots distincts mettra en évidence les deux fragments de code dans les résultats.Existe-t-il un surligneur rapide et précis pour Lucene?

Cependant, il n'agit pas bien avec des requêtes plus complexes. Dans le cas le plus simple, les requêtes de phrase telles que "Stack Overflow" correspondent à toutes les occurrences de Stack ou Overflow dans la surbrillance, ce qui donne l'impression à l'utilisateur que cela ne fonctionne pas très bien.

J'ai essayé d'appliquer le correctif here mais avec de nombreuses mises en garde sur les performances et, à la fin de la journée, j'étais complètement inutilisable. La performance est surtout un problème sur les requêtes génériques. Cela est dû à la façon dont la mise en évidence fonctionne; au lieu de simplement travailler sur la chaîne de requête et le texte, il l'analyse comme Lucene le ferait et cherche ensuite toutes les correspondances que Lucene a faites; Malheureusement, cela signifie que pour certaines requêtes génériques, il peut rechercher des correspondances avec des clauses 2000+ sur des documents volumineux, et ce n'est tout simplement pas assez rapide.

Y a-t-il une implémentation plus rapide d'un surligneur précis?

+0

plus rapidement surligneur (doit être patché en mais fera partie de version 2.9) Le « surligneur pour Lucene » lien actuellement cassé. – pro

+0

Merci d'avoir signalé cela, j'ai corrigé le lien. –

+0

Maintenant que Lucene 3.0.0 est sorti, vous devriez trouver que tout mettre à jour pour que ça fonctionne. TOUTEFOIS - attention, le surligneur a maintenant aussi une dépendance à la mémoire de lucene de contrib (cela n'apparaîtra que lors de la mise en surbrillance pour des correspondances exactes) –

Répondre

1

Vous pourriez envisager d'utiliser Solr. Solr est une sorte d'application de recherche générique qui utilise Lucene et prend en charge la surbrillance. Il est possible que la surbrillance dans Solr soit utilisable comme API en dehors de Solr. Vous pouvez également regarder comment Solr le fait pour l'inspiration.

+0

Merci, en regardant Solr - je crois que j'ai toujours confondu avec Nutch dans le passé et supposé qu'ils étaient la même chose, idiot moi. Je remarque dans les documents Solr qu'il semble séparer un PhraseHighlighter et un surligneur standard, donc je ne suis pas imprégné de beaucoup de confiance que j'ai peur :( –

+1

Malheureusement, le surligneur de Solr délègue juste au surligneur dans le Lucene Sandbox - il ne fait rien d'intelligent :( –

1

J'ai lu sur le sujet et suis tombé sur spanQuery qui vous renvoyait la durée du ou des mots appariés dans le champ qui correspondait.

Questions connexes