Görünüşe göre sorunuz kendi kendini indekslemekten çok indeks birleştirme ile ilgili.
Düşük seviyeli ayrıntıları görmezden gelirseniz indeksleme işlemi oldukça basittir. Lucene, belgelerden "ters çevrilmiş dizin" denen şeyi oluşturur. Dolayısıyla, "Olmak ya da olmamak" metnini içeren belge ve id = 1 gelirse, ters çevrilmiş dizin şöyle görünür:
[to] → 1
[be] → 1
[or] → 1
[not] → 1
Temelde budur - kelimeden verilen kelimeyi içeren belgelerin listesine giden dizin . Bu dizinin (kelime) her satırına kayıt listesi denir. Bu endeks daha sonra uzun süreli depolamada korunur.
Gerçekte elbette işler daha karmaşıktır:
- Lucene, verilen belirli Analizöre bağlı olarak bazı kelimeleri atlayabilir;
- sözcükler, dilin esnekliğini azaltmak için kök belirleme algoritması kullanılarak önceden işlenebilir;
- gönderme listesi yalnızca belgelerin tanımlayıcılarını değil, aynı zamanda belgenin içindeki verilen sözcüğün ofsetini (potansiyel olarak birkaç örnek) ve diğer bazı ek bilgileri de içerebilir.
Temel anlayış için çok önemli olmayan daha birçok komplikasyon var.
Lucene endeksinin yalnızca eklendiğini anlamak önemlidir . Zaman içinde bir noktada uygulama, dizindeki tüm değişiklikleri gerçekleştirmeye (yayınlamaya) karar verir. Lucene, tüm hizmet işlemlerini indeksle bitirir ve kapatır, böylece aranabilir. Kayıt indeksinden sonra temelde değişmez. Bu indeks (veya indeks kısmı) segment olarak adlandırılır . Lucene, bir sorgu için arama yaptığında, mevcut tüm segmentlerde arama yapar.
Öyleyse soru ortaya çıkıyor - zaten indekslenmiş belgeyi nasıl değiştirebiliriz ?
Yeni belgeler veya halihazırda dizine alınmış belgelerin yeni sürümleri, yeni bölümlerde dizine alınır ve eski sürümler, öldürme listesi adı verilen yöntemle önceki bölümlerde geçersiz kılınır . Öldürme listesi, commit edilmiş dizinin değişebilen tek parçasıdır. Tahmin edebileceğiniz gibi, dizin verimliliği zamanla düşer, çünkü eski dizinler çoğunlukla kaldırılmış belgeler içerebilir.
Birleştirme burada devreye giriyor. Birleştirme - genel olarak daha verimli bir dizin oluşturmak için birkaç dizini birleştirme işlemidir. Temelde birleştirme sırasında olan şey, canlı belgelerin yeni bölüme kopyalanması ve eski bölümlerin tamamen kaldırılmasıdır.
Bu basit süreci kullanarak Lucene, dizini arama performansı açısından iyi durumda tutabilir.
Umarım yardımcı olur.