2010-10-12 5 views
5

Ich bin neu in Lucene, ich habe angefangen, die Version 3 zu lernen und es gibt eine Sache, die ich nicht verstehe (offensichtlich, weil ich nicht in dem Thema erfahren bin).Liste der "Tokens" auf Lucene 3

In Lucene 2.9, wenn ich eine Liste von Token wollte ich würde eine ArrayList der Tokenklasse, ArrayList zum Beispiel erstellen. Das ist ziemlich intuitiv für mich und das Konzept von Token ist sehr klar.

Nun, da die Verwendung der Tokenklasse zugunsten der Attribut-basierten API aufgehoben wird, muss ich meine eigene Klasse erstellen, um die gewünschten Attribute zu kapseln? Wenn ja, stellt das nicht die Lukene-Token-Klasse wieder her?

Ich mache eine Klasse, um Analysatoren zu testen, und eine Liste von resultierenden Tokens zu haben, macht es einfacher zu testen, schätze ich.

Jede Hilfe wäre willkommen;) Vielen Dank!

Antwort

2

Nach Die Token Javadoc, "Obwohl es nicht notwendig ist Damit Token nicht mehr verwendet werden kann, kann es mit der neuen TokenStream-API als Convenience-Klasse verwendet werden, die alle Attribute implementiert. Dies ist besonders hilfreich, um einfach von der alten zur neuen TokenStream-API zu wechseln. "

Ich schlage vor, Sie verwenden weiterhin ein Token. Es entspricht der obigen Beschreibung.

+0

Danke, ich habe die Notizen zur Tokenklasse missverstanden;) – Fabio

2

Verwenden Sie die TermAttribute Klasse:

TokenStream stream = analyzer.tokenStream("field", "text"); 
TermAttribute termAttr = stream.getAttribute(TermAttribute.class); 
while (stream.incrementToken()) { 
    String token = termAttr.term(); 
} 
+0

Dank answsering, aber es antwortet nicht auf meine Frage.Ich weiß, wie man Attribute aus einem tokenstream bekommt, in dem Code, den Sie nur termattribute bekommen, also können Sie jeden Ausdruck auf einer Zeichenkette speichern [] und dort ist Ihr Liste der Token. Aber wenn Sie auch ein Offsetattribut haben wollen, dann haben Sie 2 Attribute und können sie nicht beide in einem String [] speichern, und meine Frage hängt damit zusammen. Die Tokenklasse kapselt verschiedene Attribute in einer Struktur ein und ich brauche sie bis jetzt, wenn in Lucene 3, da sie die Verwendung von Token entmutigen, was ist die empfohlene Lösung, um verschiedene Attribute in der gleichen Struktur einzukapseln? – Fabio

+0

Anscheinend gibt es keine, zumindest nicht, dass ich davon weiß. Diese Entscheidung hat mich auch überrascht. Die Lucene-Entwickler favorisieren offensichtlich die Optimierung gegenüber dem richtigen API-Design. –