2013-03-08 15 views
12

Kodumu Lucene 3.4'ten 4.1'e yükseltmeye çalışıyorum. Biri dışındaki değişiklikleri anladım. Bir alan için tüm terim değerleri üzerinde yinelemeye ihtiyaç duyan bir kodum var. Lucene 3.1'de, üzerinde tekrarlayabileceğim bir TermEnum sağlayan bir IndexReader # terms() yöntemi vardı. Bu Lucene 4.1 için değişmiş gibi görünüyor ve hatta dokümantasyonda arama birkaç saat sonra bile anlayamıyorum. Birisi bana doğru yönde işaret edebilir?Lucene'deki bir Lucene alanı için tüm terimleri nasıl alabilirim?

Teşekkürler.

+0

yoluyla yapabilirsiniz. – MahNas92

cevap

2

Lucene 4 Migration guide takip ediniz :: Eğer Çeteleler elde nasıl

değişti. Birincil giriş noktası, Fields sınıftır. Okuyucu çok segmenti olabilir

Fields fields = reader.Fields(); 
if (fields != null) { 
    ... 
} 

varsa, bunu yapmak gerekir: Eğer okuyucu tek parça okuyucu biliyorsanız, bunu

Fields fields = MultiFields.getFields(reader); 
if (fields != null) { 
    ... 
} 

fieldsnull olabilir (örn okuyucunun alanı yoksa).

MultiFields yaklaşımının, MultiReaders numaralı ürüne ilişkin bir performans isabeti gerektirdiğini unutmayın, çünkü bu, terimleri/dokümanları/konumları anında birleştirmelidir. Bunun yerine sıralı okuyucuları ( oal.util.ReaderUtil'u kullanın) ve daha sonra bu okuyuculardan ( ) adım adım ilerleyebilmeniz ( ) daha iyidir (eğer Lucene bu şekilde arama yapar).

Bir SegmentReaderMultiFields.fields için o olacak basitçe dönüşü reader.fields() geçmesi, böylece bu durumda isabet hiçbir performans varsa. Eğer boş olmayan alanlar sahip olduktan sonra

bunu yapabilirsiniz:

Terms terms = fields.terms("field"); 
if (terms != null) { 
    ... 
} 

termsnull olabilir (örn alan yoksa).

dışı bir null terimleri sahip olduktan sonra böyle bir enum alabilirsiniz:

TermsEnum termsEnum = terms.iterator(); 

TermsEnum boş olmayacaktır döndü.

Ardından .next() Sadece kafa karıştırıcı ve arama ve soru formülasyonu içinde cevap bulmak için sezgisel olmayan olabilir beri işaretlediğiniz cevap cevabı bölümünü taşındı TermsEnum

+11

Geçiş rehberinden bahsetmek çok güzel, ama cevabınız, burada soruyla ve ilgili önerilerinizle ilgili kısmı gönderebilmeniz çok daha yararlı olacaktır. – javanna

+2

Sadece ilgili kısmı yukarıdaki soruya ekledim. – ali

+0

hmm, kötüyüm, bundan böyle hesaba katılacağım. – phani

İlgili konular