2011-02-09 24 views
5

Web sitemi dizine eklemek için, belgenin kök dizinindeki her dosyayı Solr'a yükleyen bir kabuk komut dosyası üreten bir Ruby komut dosyası kullanıyorum. kabuk komut dosyası şuna benzer birçok çizgiler vardır:/solr/update ile indekslenirken bir SOLR belgesini artırma

curl -s \ 
"http://localhost:8983/solr/update/extract?literal.id=/about/core-team/&commit=false" \ 
-F "[email protected]/extra/www/docroot/about/core-team/index.html" 

... ve biter:

curl -s http://localhost:8983/solr/update --data-binary \ 
'<commit/>' -H 'Content-type:text/xml; charset=utf-8' 

Bu Solr benim belge kök tüm dokümanları yükler. Dokümanları çeşitli biçimlerde (öncelikle PDF ve HTML) Solr'a yüklemek için tika and ExtractingRequestHandler kullanıyorum.

Bu kabuk komut dosyasını oluşturan komut dosyasında, kimlik alanlarının (a/k/a url) belirli normal ifadelerle eşleşip eşleşmediğine bağlı olarak bazı belgeleri yükseltmek isterim.

boost = 2 if url =~ /cool/ 
boost = 3 if url =~ /verycool/ 
# otherwise we do not specify a boost 

benim http isteği o indeks zamanlı destek eklemenin en kolay yolu nedir:

Şimdi bu artırılması kurallar (yalancı kod) olduğunu düşünelim?

curl -s \ 
"http://localhost:8983/solr/update/extract?literal.id=/verycool/core-team/&commit=false" \ 
-F "[email protected]/extra/www/docroot/verycool/core-team/index.html" \ 
-F boost=3 

ve:

denedim

curl -s \ 
"http://localhost:8983/solr/update/extract?literal.id=/verycool/core-team/&commit=false" \ 
-F "[email protected]/extra/www/docroot/verycool/core-team/index.html" \ 
-F boost.id=3 

Ne arama sonuçlarının sıralamada bir fark yarattı. İstediğim şey, kullanıcının aradığı şey ne olursa olsun, arama sonuçlarında ilk sırada yer almasıdır (tablonun sorgularını içermesi kaydıyla).

XML biçiminde POST yaparsam, belgenin tamamı veya belirli bir alan için destek değerini belirleyebileceğimi anlıyorum. Ama eğer bunu yaparsam, bir dosyayı belge içeriği olarak nasıl belirleyeceğimiz açık değildir. Aslında tika page kısmi örnek verir:

curl "http://localhost:8983/solr/update/extract?literal.id=doc5&defaultField=text" \ 
--data-binary @tutorial.html -H 'Content-type:text/html' 

Ama yine benim boost nasıl belirtileceği nerede/açık değildir. Denedim: arama sonuçları değişmiş İkisi de

curl \ 
"http://localhost:8983/solr/update/extract?literal.id=mydocid&defaultField=text&boost=3"\ 
--data-binary @mydoc.html -H 'Content-type:text/html' 

ve

curl \ 
"http://localhost:8983/solr/update/extract?literal.id=mydocid&defaultField=text&boost.id=3"\ 
--data-binary @mydoc.html -H 'Content-type:text/html' 

.

Belge içeriğini değiştirmeksizin bir belgenin (belirli bir alan değil) destek özelliğini güncellemenin bir yolu var mı? Öyleyse, iki adımda benim hedefe ulaşmak olabilir: Ben 2 yapıyor gibi) 1) Yükleme/index belgesine bazı belgelerin endeksi için

cevap

3

Solr bir belge hızlanacağını belirtin, aşağıda belirtilen yerlere POST zorunda/güncelleme işleyicisi. Dizine eklenecek belgeler POST isteğinin gövdesine konur. Genel olarak, xml format format of Solr'u kullanmanız gerekir. Bu xml'yi kullanarak, belirli bir alana veya tüm belgeye bir destek değeri ekleyebilirsiniz.

+1

Şu ana kadar XML formatını kullanmadan geçiyorum. XML formatını kullanırsam, belge gövdesi olarak bir dosyayı nasıl (PDF veya HTML) yüklerim? –

+0

Maalesef, ExtractingHandler'ı kullandığınızı farketmedim ... Bir alanda bir destek belirtmek için kullandığınız sözdizimi doğrudur (boost.field = value). Ancak id alanını artırdığınızı fark ettim.Etkili olması için, sorgulama yapacağınız bir alanda bir dizin süresi artışı olmalıdır (bkz. Http://wiki.apache.org/solr/SolrRelevancyFAQ#index-time_boosts). –

+0

Teşekkürler. Sonunda böyle bir şey yaptığını işe aldım: 'curl -s "http: // localhost: 8983/Solr/güncelleme/ayıklamak literal.id =/mydoc.html & taahhüt = false & boost.text = 3" -F "myfile [email protected] "' Ben de açıkça tika PDF'leri tüm içeriğini, vb sayesinde koyar nerede 'metin' arama alanına benim arama formunu değiştirmek zorunda kaldı. –