2010-12-08 5 views
6

Je passais par toutes les questions existantes mais je ne pouvais pas obtenir quelque chose de très pertinent.Lucene Fuzzy Recherche de noms de clients et adresse partielle

J'ai fichier avec des millions de dossiers pour la personne prénom, nom, adresse1, adresse2, code de pays, date de naissance - Je voudrais vérifier ma liste de clients avec le fichier ci-dessus sur une base quotidienne se mettre à jour quotidiennement et le fichier est également mis à jour quotidiennement). Pour le prénom et le nom, je voudrais correspondre fuzzy (peut être lucene fuzzyquery/levenshtein distance 90% match) et pour les champs restants pays et date de naissance, je voulais exacte correspondance. Je suis nouveau à Lucene, mais en regardant le nombre de messages, semble être possible.

Mes questions sont les suivantes:

  • Comment dois-je indexer mon fichier d'entrée? J'ai besoin de construire l'index sur la combinaison de FN, LN, pays, DOB et utiliser l'index pour la recherche
  • Comment puis-je utiliser la requête Fuzzy de Lucene ici?

Existe-t-il un autre moyen de mettre en œuvre la même chose?

Répondre

4

Rushik, voici quelques idées:

  • Pensez à utiliser Solr. Il est beaucoup plus facile de commencer à l'utiliser, plutôt que Lucene nue.
  • Construire un index Lucene/Solr du fichier. Il semble qu'un document par client suffit, si vous utilisez un champ à plusieurs valeurs ou deux champs différents pour les adresses.
  • Avez-vous un identifiant unique par personne? Pour utiliser Solr, vous en avez besoin. Dans Lucene, vous pouvez vous en sortir sans utiliser un identifiant unique.
  • Enregistrez le code du pays en tant que "mot clé". Si vous n'avez besoin que d'une correspondance exacte pour la date de naissance, vous pouvez faire la même chose. Pour les requêtes de plage, vous aurez besoin d'une autre représentation.
  • Je suppose que votre liste de clients est plus petite que le fichier. Une politique possible serait d'indexer tous les jours les changements dans le fichier (ici, un identifiant unique est vraiment pratique - sinon vous devez supprimer par requête, qui peut manquer la marque). Ensuite, vous pouvez optimiser l'index, puis lancer une recherche pour votre liste de clients mise à jour.
  • Ce que vous décrivez est un BooleanQuery, dont les clauses sont des requêtes floues pour les noms et prénoms et les requêtes de termes pour les autres champs. Vous pouvez créer la requête par programme ou en utilisant le query parser.
  • Envisagez d'utiliser soundex pour les noms comme décrit here.
+0

Merci Yuval, oui j'ai ID unique par personne dans le fichier , donc je devrais être bon. liste des clients est beaucoup plus petit que le fichier de la personne. Je vais essayer de résoudre ce problème et revenir. – Rushik

2

Quelques documents universitaires sur ce sujet valent bien la lecture (Google pour les fichiers PDF gratuits):

  • Comparaison du nom personnel Matching: Techniques et questions pratiques (2006)
  • Vue d'ensemble du compte rendu liens et orientations de la recherche en cours (2006)
  • Un système parallèle de liaison de données Open Source (2004)

Vous devriez aussi c nvisager les bibliothèques/cadres suivants:

(répondues pour les futurs visiteurs.)

Questions connexes