Come si ottengono le enumerazioni è cambiato. Il punto di ingresso principale è la classe Fields
. Se si conosce il lettore è un unico lettore di segmento, fare questo:
Fields fields = reader.Fields();
if (fields != null) {
...
}
Se il lettore potrebbe essere multi-segmento, è necessario farlo:
Fields fields = MultiFields.getFields(reader);
if (fields != null) {
...
}
Il fields
può essere null
(ad esempio, se il lettore non ha campi).
Si noti che l'approccio MultiFields
comporta un calo di prestazioni su MultiReaders
, in quanto deve unire termini/documenti/posizioni al volo. È in genere meglio acquistare lettori sequenziali (utilizzare oal.util.ReaderUtil
) e quindi passare direttamente da quei lettori, se possibile (questo è il modo in cui Lucene guida le ricerche).
Se si passa un SegmentReader
per MultiFields.fields
lo farà semplicemente ritorno reader.fields()
, quindi non c'è prestazioni colpito in quel caso.
Una volta che avete campi non nulli si può fare questo:
Terms terms = fields.terms("field");
if (terms != null) {
...
}
Il terms
può essere null
(ad esempio, se il campo non esiste).
Una volta che avete non null
termini è possibile ottenere un enum come questo:
TermsEnum termsEnum = terms.iterator();
La restituito TermsEnum
non ci sarà nulla.
È quindi possibile .next()
attraverso il TermsEnum
Ho appena spostato la parte risposta alla risposta contrassegnato dal momento che potrebbe essere fonte di confusione e non intuitivo per cercare e trovare la risposta nella formulazione domanda. – MahNas92