2010-12-08 6 views
6

Ich ging durch alle vorhandenen Fragen Beiträge, konnte aber nicht viel relevantes bekommen.Lucene Fuzzy Suche nach Kundennamen und teilweise Adresse

Ich habe Datei mit Millionen von Datensätzen für Person Vorname, Nachname, Adresse1, Adresse2, Ländercode, Geburtsdatum - Ich möchte meine Liste der Kunden mit oben genannten Datei auf täglicher Basis (meine Kundenliste auch überprüfen täglich aktualisiert und Datei wird auch täglich aktualisiert).

Für Vornamen und Nachnamen möchte ich Fuzzy-Match (kann Lucene Fuzzyquery/Levenshtein Entfernung 90% übereinstimmen) und für die restlichen Felder Land und Geburtsdatum wollte ich genau übereinstimmen.

Ich bin neu in Lucene, aber durch die Anzahl der Beiträge sieht, wie es möglich ist.

Meine Fragen sind:

  • Wie sollte ich Datei meinen Input Index? Ich muss Index auf Kombination von FN, LN, Land, DOB bauen und den Index für die Suche verwenden
  • Wie kann ich Fuzzy-Abfrage von Lucene hier verwenden?

Gibt es noch eine andere Möglichkeit, das gleiche zu implementieren?

Antwort

4

Rushik, hier sind ein paar Ideen:

  • Betrachten Solr verwenden. Es ist viel einfacher, es zu benutzen als Lucene.
  • Erstellen Sie einen Lucene/Solr-Index der Datei. Es scheint, dass ein Dokument pro Kunde ausreicht, wenn Sie ein mehrwertiges Feld oder zwei verschiedene Felder für Adressen verwenden.
  • Haben Sie eine eindeutige ID pro Person? Um Solr zu benutzen, brauchst du eins. In Lucene können Sie ohne eine eindeutige ID entkommen.
  • Speichern Sie den Ländercode als "Schlüsselwort". Wenn Sie nur das genaue Geburtsdatum benötigen, können Sie dasselbe tun. Für Bereichsabfragen benötigen Sie eine andere Darstellung.
  • Ich nehme an, Ihre Kundenliste ist kleiner als die Datei. Eine mögliche Richtlinie wäre, die Änderungen in der Datei täglich zu indizieren (Hier ist eine eindeutige ID wirklich praktisch - andernfalls müssen Sie durch Abfrage löschen, die die Markierung möglicherweise verfehlt). Dann können Sie den Index optimieren und danach eine Suche nach Ihrer aktualisierten Kundenliste durchführen.
  • Was Sie beschreiben, ist eine BooleanQuery, deren Klauseln Fuzzy-Abfragen für die Vor- und Nachnamen und Termabfragen für die anderen Felder sind. Sie können die Abfrage programmatisch oder mit der query parser erstellen.
  • Verwenden Sie soundex für Namen wie beschrieben here.
+0

Dank Yuval, ja, ich habe eindeutige ID pro Person in der Datei also sollte ich gut sein. Kundenliste ist viel kleiner als die Personendatei. Ich werde versuchen, das zu lösen und zurückkommen. – Rushik

2

Einige wissenschaftlichen Arbeiten zu diesem Thema sind lesenswert (google für die kostenlose PDFs):

  • Ein Vergleich von Personal Namen Matching: Techniken und praktische Probleme (2006)
  • Überblick Bilanz Linkage und aktuelle Forschungs Anfahrt (2006)
  • ein parallel Open Source Daten Linkage System (2004)

Sie sollten auch c onsider folgende Bibliotheken/Frameworks:

(Beantwortet für zukünftige Besucher.)