2011-02-09 21 views
5

Aby zindeksować moją stronę, mam skrypt w języku Ruby, który z kolei generuje skrypt powłoki, który przesyła każdy plik z katalogu głównego mojego dokumentu do Solr. Skrypt powłoki ma wiele wierszy, które wyglądają tak:Jak ulepszyć dokument SOLR podczas indeksowania za pomocą/solr/update

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" 

... i kończy się:

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

ten przesyła wszystkie dokumenty w moim głównego dokumentu do Solr. Używam tika and ExtractingRequestHandler do przesyłania dokumentów w różnych formatach (głównie PDF i HTML) do Solr.

W skrypcie, który generuje ten skrypt powłoki, chciałbym zwiększyć liczbę dokumentów w zależności od tego, czy ich pole id (URL/a/k/a) pasuje do niektórych wyrażeń regularnych.

Powiedzmy, że takie są zasady pobudzanie (pseudokod):

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

Jaki jest najprostszy sposób na dodanie które zwiększają wskaźnik czasu do mojego żądania HTTP?

Próbowałem:

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 

oraz:

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 

Ani zrobił różnicę w kolejności wyników wyszukiwania. Chcę, aby wzmocnione wyniki były pierwsze w wynikach wyszukiwania, niezależnie od tego, czego szukał użytkownik (pod warunkiem oczywiście, że dokument zawiera ich zapytanie).

Rozumiem, że jeśli POST w formacie XML mogę podać wartość doładowania dla całego dokumentu lub określonego pola. Ale jeśli to zrobię, nie jest jasne, jak określić plik jako zawartość dokumentu. Właściwie tika page zapewnia częściowe przykład:

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

Ale znowu nie jest jasne, gdzie/jak określić mój impuls. Próbowałem:

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

i

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

którego Ani zmieniony wyniki wyszukiwania.

Czy istnieje sposób aktualizacji tylko atrybutu doładowania dokumentu (a nie konkretnego pola) bez zmiany zawartości dokumentu? Jeśli tak, to mogę osiągnąć mój cel w dwóch etapach: 1) Dodaj dokumencie/index jak robiłem 2) Określ impuls do niektórych dokumentów

Odpowiedz

3

indeksować dokument w Solr, musisz opublikować go do/update handler. Dokumenty do zindeksowania są umieszczane w treści żądania POST. Ogólnie rzecz biorąc, musisz użyć xml format format of Solr. Używając tego xml, możesz dodać wartość doładowania do konkretnego pola lub do całego dokumentu.

+1

Dotarłem do tej pory bez użycia formatu XML. Jeśli używam formatu XML, w jaki sposób mogę przesłać plik (PDF lub HTML) jako treść dokumentu? –

+0

Niestety, nie zauważyłem, że używałeś funkcji ExtractingHandler ... Składnia, której użyłeś do określenia wzmocnienia na polu jest poprawna (boost.field = wartość). Ale zauważam, że wzmacniasz pole id.Aby być skutecznym, zwiększenie indeksu czasu powinno znajdować się na polu, na które będziesz zadawać pytania (zobacz http://wiki.apache.org/solr/SolrRelevancyFAQ#index-time_boosts). –

+0

Dzięki. W końcu udało mi się to zrobić, wykonując coś takiego: 'curl -s" http: // localhost: 8983/solr/update/extract? Literal.id =/mydoc.html & commit = false & boost.text = 3 "-F" myfile [email protected]ml "' Musiałem również zmienić formularz wyszukiwania, aby wyraźnie wyszukać pole "tekst", w którym tika umieszcza całą zawartość plików PDF itp. Dzięki. –

Powiązane problemy