2010-10-29 11 views
5

Uzun bir indeks yeniden oluşturma sırasında en iyi uygulama/programlama hakkında genel bir soru soruyoruz. Bu soru "solr spesifik" değil, aynı zamanda ham Lucene ya da benzer bir indeksleme aracı/kütüphane/kara kutuya da uygulanabilir. Bir 12 saatlik endeksinin seyri sırasında yeniden, eğerSolr/Lucene indeksinin uzun süre sonra yeniden yapılandırılması için en iyi yöntem

soru

Solr/Lucene indeksi sağlamak için en iyi uygulama yeniden uzun endeksi sonra "kesinlikle güncel" dir nedir yani, kullanıcılar eklemek var/db kayıtları veya dosyaları (PDF'ler) sil/değiştir, en sonunda yeniden oluşturma endeksinin bu değişiklikleri “içerdiğini” nasıl sağlıyorsunuz?

Bağlam

  • Büyük Veritabanı ve Solr dizine Dosya Sistemi (örn pdfs)
  • core0 “arama” ve tüm/değişiklikleri eklemek içindir
  • Çok çekirdekli Solr örneği,/core1 içindir siler “Yeniden.” Core1 bir “geçici çekirdek” dir. arar ve güncellemeleri taze yeniden db karşı

Güncel Yaklaşım gitmek böylece

  • sürecini yeniden core0 için biz yeniden 'hareket' core1 sona erdikten sonra
  • , db sorgular ve/veya dosya sistemini “tüm db kayıtları” veya “tüm dosyalar” için kaydırır.
  • Yeniden oluşturma, sorgu/dosya sistemi geçişinin sonunda ortaya çıkarsa, yeni db kayıtları/pdfs “alır”. (Örnek: Sorgu, element_id tarafından eleman sırasından * seçmektir. Eğer sonuç setini açık tutarsak, yani bir kerede büyük bir liste oluşturmak yerine, sonuç kümesi sonunda eklenen girdileri içerecektir. yeni dosyalar “sonunda” (yeni klasör veya yeni dosya) eklenir, dosya geçişi bu dosyaları içerir.
  • Yeniden oluşturma değil “aşağıdakileri” alır: db kayıtları/belgeleri için yeniden yapılan değişiklikler veya silme süreç önceden işlenmiş,

Önerilen yaklaşım “sadece indislemelisiniz”

  • Solr istemcisini izleyin (ör. db tablosu aracılığıyla) db/dosya sistemine yapılan tüm ekleme/değiştirme/silme işlemleri
  • Yeniden oluşturmanın sonunda (ancak çekirdeği değiştirmeden önce), bu değişiklikleri işleyin: örn. silinen tüm kayıtlar/pdfs dizininden silin,
  • Solr herhangi büyü var mı core1 içine core0 “birleşmek” anlamına daha iyi bir yaklaşım var mı

    • takip tüm güncellemeleri ve eklemeler

    reindex

Teşekkürler

cevap

1

Bu kediyi ciltlemek için çeşitli yollar vardır ....Ben çekirdek1 ("güvertede" çekirdek) uzun indeksleme işlemi sırasında zaten zaten nüfuslu core0 (aka "canlı" çekirdek) karşı kullanıcı sorguları çalıştırıyor tahmin ediyorum.

  1. Eğer nelerin değiştiğini ayırt edebilir, neden sadece canlı çekirdek güncellemek? Hangi çekirdeklerin güncellendiğini ve silinip silinmediğini öğrenmek için canlı çekirdeğe ve PDF dosya sisteminize yönelik sorguları çalıştırabiliyorsanız, tüm bunları canlı çekirdeğe karşı yapın ve bu çevrimdışı işlemi atlatın. Bu en basit olurdu .... Sadece hangi değiştiğini algılamak için solr belgenizde pdf güncelleme süresini koydu. Pdf solr içinde yoksa, o zaman ekleyin. Solr belge kimliklerinin bir listesini tutun ve sonuçta, eşleşen bir PDF'si olmayanlar silinebilir. Bu arada hala gerçek zamanlı güncellemeleriniz var.

  2. Gelen canlı güncellemeleri ve multipleks (?) Bunları proxy olarak kullanabilir ve böylece Core1 ve Core0'a geçebilirsiniz. Basit bir proxy arayüzü oluşturdum ve çok basit buldum. Bu şekilde tüm güncellemeleriniz her iki çekirdeğinize de gidiyor ve herhangi bir "mutabakat" yapmak zorunda değilsiniz.

  3. Son olarak, iki çekirdek birleştirebilirsiniz: http://wiki.apache.org/solr/MergingSolrIndexes#Merging_Through_CoreAdmin Aynı kimliğe sahip iki belge varsa veya bir belgede bir çekirdek yoksa, ancak diğerlerinde yoksa, ne olacağını gerçekten bilmiyorum ... Her şeyin ek bir süreç olduğunu varsayalım, ama bunu kazmak isteyeceksiniz.

Bunun nasıl yapıldığını duyduğuma sevin!