Jak uzyskać stałe teksty uległ zmianie. Podstawowym punktem wejścia jest klasa Fields
. Jeśli wiadomo, że czytelnik jest jeden czytnik segmentu zrobić to:
Fields fields = reader.Fields();
if (fields != null) {
...
}
Jeśli czytelnik może być wielosegmentowy, trzeba to zrobić:
Fields fields = MultiFields.getFields(reader);
if (fields != null) {
...
}
fields
może być null
(np jeśli czytnik nie ma pól).
Należy zauważyć, że podejście MultiFields
pociąga za sobą działanie polegające na trafieniu na wydajność MultiReaders
, ponieważ musi łączyć warunki/dokumenty/pozycje w locie. Zasadniczo lepiej jest zamiast tego uzyskać czytniki sekwencyjne (należy użyć oal.util.ReaderUtil
), a następnie przejść przez te czytniki, jeśli możesz (tak Lucene kieruje wyszukiwanie).
Jeśli zdać SegmentReader
do MultiFields.fields
będzie to po prostu zwrot reader.fields()
, więc nie ma wydajność trafienie w tym przypadku.
Gdy masz niepusta Fields można to zrobić:
Terms terms = fields.terms("field");
if (terms != null) {
...
}
terms
może być null
(np jeśli pole nie istnieje).
Gdy masz niebędącego null
warunki można uzyskać enum tak:
TermsEnum termsEnum = terms.iterator();
Zwracany TermsEnum
nie będzie null.
można następnie .next()
przez TermsEnum
prostu przeniósł część odpowiedź na odpowiedź Oznaczyłeś ponieważ może to być mylące i nieintuicyjne, aby szukać i znaleźć odpowiedź na pytanie, które preparatu. – MahNas92