2013-03-08 10 views
12

Próbuję zaktualizować mój kod z Lucene 3.4 do 4.1. Wymyśliłem zmiany oprócz jednego. Mam kod, który musi iterować po wszystkich wartościach wartości dla jednego pola. W Lucene 3.1 istniała metoda # Index() IndexReader zapewniająca wartość TermEnum, którą mógłbym powtórzyć. Wygląda na to, że zmieniło się w Lucene 4.1 i nawet po kilkugodzinnym wyszukiwaniu w dokumentacji nie jestem w stanie zrozumieć, w jaki sposób. Czy ktoś może wskazać mi właściwy kierunek?Jak uzyskać wszystkie warunki dla pola Lucene w Lucene 4

Dzięki.

+0

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

Odpowiedz

2

Należy przestrzegać Lucene 4 Migration guide ::

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

+11

Wspaniale wspomnieć o podręczniku migracji, ale myślę, że twoja odpowiedź byłaby o wiele bardziej użyteczna, gdybyś mógł zamieścić tu część, która jest istotna dla pytania i co sugerujesz. – javanna

+2

Właśnie dodałem odpowiednią część do mojego pytania powyżej. – ali

+0

hmm, moje złe, wezmę to pod uwagę od teraz .. – phani