2009-06-18 4 views
0

Ich habe einen benutzerdefinierten Tokenizer in Solr erstellt, der nach benannten Entitäten sucht. Ich möchte in der Lage sein, diese Informationen zu verwenden, um separate Felder innerhalb des Lucene/Solr-Dokuments zu füllen.Solr: Füllen Sie separate Felder von einem Tokenizer

Als Beispiel möchte ich ein mehrwertiges Feld namens "locations" mit allen Ortsnamen füllen, die aus dem Text extrahiert wurden. Um Orte zu extrahieren, wird der Text zuerst in Token aufgeteilt, um die Wörter zu trennen und um festzustellen, welche Token Orte sind. Nach diesem Prozess möchte ich die Token für den Tokenizer ausgeben, aber auch das Feld "locations" mit allen Ortsnamen füllen, die aus dem Text extrahiert wurden.

Aus den Nachforschungen, die ich gemacht habe, gibt es keine Möglichkeit, auf das SolrDocument-Objekt vom Tokenizer oder der TokenizerFactory zuzugreifen, so dass es keine Möglichkeit gibt, Felder von hier aus aufzufüllen.

Die Lösung, die ich bisher gefunden habe, ist eine benutzerdefinierte UpdateRequestProcessorFactory zu erstellen, die den Text verarbeitet und die Felder extrahiert, und dann verarbeitet der Tokenizer den Text AGAIN, um die Token zu erhalten. Ich würde gerne einen Weg finden, diese Arbeit machen zu können und den Text nur einmal zu bearbeiten.

Antwort

1

Die Art, wie ich es tun ist weniger elegant das, was es sieht aus wie Sie schießen für:

ich die Dokumente vorverarbeiten eine benannte Entität Erkenner verwenden und alle Einheiten in einer separaten Datei zu speichern. Wenn ich dann in Solr publiziere, lese ich einfach die Entitäten aus dieser Datei und befülle die Entitätsfelder (unterschiedlich für Personen, Standorte und Organisationen). Dies könnte vereinfacht werden, aber da ich das Parsing bereits für andere Arbeiten durchgeführt hatte, war es einfacher, das wiederzuverwenden, was bereits existierte.

0

Hier ist eine Idee, ich denke, würde in Lucene funktionieren, aber ich habe keine Ahnung, ob es in solr möglich ist. Sie könnten die Zeichenfolge außerhalb der typischen Tokenstream-Kette als Token verwenden, wie Sie vorschlagen, und dann die Token mithilfe der Option NOT_ANALYZED manuell zum Dokument hinzufügen. Sie müssen jedes Token separat mit document.add (...) hinzufügen, welches Lucene als einzelnes Suchfeld behandelt.

Verwandte Themen