2010-04-06 41 views
5

J'essaie de faire une correspondance floue sur la phrase "Grand Prarie" (délibérément mal orthographié) en utilisant Apache Lucene. Une partie de mon problème est que l'opérateur ~ ne fait que des correspondances floues sur des termes à un seul mot et se comporte comme une correspondance de proximité pour les phrases.Lucene Fuzzy Match sur la phrase au lieu d'un seul mot

Existe-t-il un moyen de faire une correspondance floue sur une phrase avec lucene?

Répondre

2

Il n'y a pas de support direct pour une expression floue, mais vous pouvez la simuler explicitement en enumerating the fuzzy terms puis en l'ajoutant à un MultiPhraseQuery. La requête résultante ressemblerait à ceci:

<MultiPhraseQuery: "grand (prarie prairie)"> 
+0

+1. Le chemin à parcourir – Yaroslav

+2

Pourriez-vous élaborer un peu plus à ce sujet? Je n'utilise pas Lucene directement, mais plutôt par Solr. Il se peut que je doive simplement me déplacer pour lire lucene en action. Cela ne me dérangerait pas de mieux comprendre comment les deux travaillent ensemble et deviennent plus à l'aise avec cela à un niveau plus fondamental. Pour l'instant, dans Solr, je réalise quelque chose qui est assez efficace pour moi en utilisant l'analyseur solr.PhoneticFilterFactory. – Koobz

1

Entré à travers ce par Google et senti des solutions où pas ce que je recherchais. Dans mon cas, la solution consistait simplement à répéter la séquence de recherche par rapport à l'API solr. Ainsi, par exemple, si je cherchais: title_t inclure match pour la « chien ~ » et « chat ~ », j'ai ajouté un code manuel pour générer la requête comme:

((title_t:dog~) and (title_t:cat~)) 

Il pourrait être juste ce ci-dessus requêtes sont à propos, cependant les liens semblent morts.

+0

Voilà ce dont j'avais besoin :) merci – Oyeme