2012-06-29 14 views
9

Ruby on Rails uygulamasında dizin oluşturmak ve arama yapmak için Sunspot Solr kullanıyoruz.Sunspot Solr'da yalnızca bazı nesnelerin yeniden dizini nasıl özülür

Bazı nesneleri yeniden dizine almak istedik ve birileri yanlışlıkla Rails Console'dan Product.reindex komutunu çalıştırdı. Sonuç olarak, tüm ürünlerin indekslenmesi sıfırdan başladı ve endeksleme gerçekleşirken kataloğumuz boş görünüyordu. Büyük miktarda veriye sahip olduğumuzdan, reindexing şu ana kadar üç gün boyunca alınmıştır. Bu sabah yeniden dizilimin ilerleyişini kontrol ettiğimde, yeniden birleştirme işleminin tamamlanmadan durdurulmasıyla sonuçlanan tek bir bozuk veri girişi varmış gibi görünüyor.

Tüm Product.reindex işlemlerini çok uzun sürdüğü için yeniden başlatamıyorum. Seçilmiş ürünler üzerinde sadece reindexing işlemek için bir yolu var mı? Dizine eklenmeyen bir dizi ürün seçmek istiyorum ve sonra sadece indekslemeyi çalıştırmak istiyorum. Tüm veri kümesinin eksiksiz bir reindexini çalıştırmak zorunda kalmadan endekse nasıl tek bir ürün ekleyebilirim? Bir nesne kaydedildiğinde her

+0

- Dizine tek bir ürünü nasıl ekleyebilirim .. ", tek bir sütun/alan mı yoksa bir belge alt kümesi mi demek istiyorsunuz? – user1452132

cevap

7

Ben otomatik olarak kaydetmek geri aramaları kapsamında yeniden dizine eklenir, https://github.com/sunspot/sunspot#reindexing-objects

iyi çözümü bulduk. Bu yüzden gerekli olan her şey bir diziye reindexing gereken tüm nesneleri eklemek ve sonra her nesne üzerinde kaydetme çağrısı boyunca dizi boyunca döngü oldu. Bu, dizindeki gerekli nesneleri başarıyla güncelledi.

+0

Henüz hangisinin endekslenmediğini nasıl anladınız? – kidbrax

+0

Birkaç manuel nokta kontrolü yaptık. 2011 yılından itibaren ürünlerimizi aldıktan sonra renksiz kalacağını biliyorduk, bu yüzden ürünlerimizden bazılarını elle kontrol ettik. Sonra Rails konsolunda bu ürünleri içeren bir dizi oluşturmak ve bunları tekrar kaydederek geri aramaları yeniden başlattık. – Stanley

+1

Yeniden dizilim, bu kadar uzun sürüyorsa, arama tanımlarında kullandığınız herhangi bir ilişkilendirmeyi göz önünde bulundurmadan, saf bir şekilde gerçekleştirmeniz mümkündür. Yerleşik tırmık görevi bu şekilde çalışır ve çok yavaştır. Reindex komutu, ActiveRecord'ın daha fazla verim sağlamasına izin verir. 15 dakikadan 15 saniyeye kadar indeks aldım. Bu sözdizimini deneyin: '' 'Book.solr_reindex (: batch_size => 1000,: include => [: yazar, {: bölümler =>: paragraflar}])' '' Ayrıca, kısmi sözcüğe gereksiz yere izin verip vermediğine bakın. Dizini gerçekten toplulaştıran aramalar. –

12

Sunspot, bir nesneyi kaydedebilmeniz için geri arama kaydındaki bir nesneyi indeksler, ancak bu da diğer geri aramaları da tetikleyebilir. Daha kesin yolu onlar sadece bir dizi olarak

Sunspot.index [post1, post2] 
Sunspot.commit 

veya autocommit

Sunspot.index! [post1, post2] 

ile Hatta nesne ilişkilerinde geçebileceği olacağını yapamayacak kadar

diyorsunuz
Sunspot.index! post1.comments 
İlgili konular