2010-10-12 6 views
5

Sono nuovo di Lucene, ho iniziato a imparare il ramo della versione 3 e c'è una cosa che non capisco (ovviamente perché non ho esperienza nell'argomento).Elenco di "token" su Lucene 3

In Lucene 2.9, se volessi un elenco di token, creerei una classe ArrayList di Token, ad esempio ArrayList. Questo è abbastanza intuitivo per me e il concetto di token è molto chiaro.

Ora che l'utilizzo della classe Token è disattivato a favore dell'API basata sugli attributi, devo creare la mia classe per incapsulare gli attributi che voglio? Se sì, non è quello che ricrea quasi la lezione dei Token di Lucene?

Sto facendo una lezione per testare gli analizzatori, e avere una lista di token risultanti rende più facile testare, credo.

Qualsiasi aiuto sarebbe apprezzato;) Grazie!

risposta

2

Secondo Token Javadoc, "Anche se non è necessario y per usare più Token, con la nuova API TokenStream può essere usata come classe di convenienza che implementa tutti gli Attributi, che è particolarmente utile per passare facilmente dalla vecchia alla nuova API TokenStream. "

Suggerisco di continuare a utilizzare un token. Corrisponde alla descrizione di cui sopra.

+0

Grazie, ho frainteso le note sulla classe Token;) – Fabio

2

utilizzare la classe TermAttribute:

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

Grazie ansioso, ma non risponde alla mia domanda. So come ottenere attributi da un tokenstream, nel codice che si ottiene solo come attributo, in modo da poter salvare ogni termine su una stringa [] e c'è il tuo elenco di token. Ma nel caso tu voglia anche un offsetattributo, allora hai 2 attributi e non puoi salvarli entrambi su una stringa [], e la mia domanda è legata a quello .. la classe Token incapsula vari attributi in una stessa struttura, e ho bisogno per ora se in Lucene 3, poiché disincentivano l'uso del token, qual è la soluzione raccomandata per incapsulare vari attributi nella stessa struttura? – Fabio

+0

Apparentemente non ce n'è, almeno non che io sappia. Sono stato sorpreso anche da questa decisione. Gli sviluppatori Lucene apparentemente preferiscono l'ottimizzazione rispetto alla corretta progettazione dell'API. –