2011-02-09 19 views
5

Per indicizzare il mio sito Web, dispongo di uno script Ruby che a sua volta genera uno script di shell che carica tutti i file nella root del documento in Solr. Lo script di shell ha molte linee simili a questa:Come aumentare un documento SOLR durante l'indicizzazione con/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" 

... e termina con:

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

Questa Carica tutti i documenti in mio documento root per Solr. Io uso tika and ExtractingRequestHandler per caricare documenti in vari formati (principalmente PDF e HTML) a Solr.

Nello script che genera questo script di shell, vorrei aumentare alcuni documenti in base al fatto che il loro campo ID (a/k/a url) corrisponda a determinate espressioni regolari.

Diciamo che queste sono le regole d'amplificazione (pseudocodice):

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

Qual è il modo più semplice per aggiungere quella spinta indice di tempo alla mia richiesta http?

ho provato:

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 

e:

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 

Né fatto la differenza nel l'ordinamento dei risultati di ricerca. Quello che voglio è che i risultati potenziati vengano prima nei risultati di ricerca, indipendentemente da ciò che l'utente ha cercato (a condizione, naturalmente, che il documento contenga la loro query).

Capisco che se I POST in formato XML è possibile specificare il valore di boost per l'intero documento o un campo specifico. Ma se lo faccio, non è chiaro come specificare un file come contenuto del documento. In realtà, il tika page fornisce un esempio parziale:

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

Ma ancora una volta non è chiaro dove/come specificare la mia spinta. Ho provato:

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

e

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

Nessuno dei quali alterato i risultati di ricerca.

C'è un modo per aggiornare solo l'attributo boost di un documento (non un campo specifico) senza alterare il contenuto del documento? Se è così, ho potuto realizzare il mio obiettivo in due fasi: 1) Carica documento/indice come ho fatto 2) Specificare spinta per alcuni documenti

risposta

3

Per indicizzare un documento in Solr, bisogna post-it al/gestore aggiornamento. I documenti da indicizzare vengono inseriti nel corpo della richiesta POST. In generale, è necessario utilizzare xml format format of Solr. Usando quel xml, puoi aggiungere un valore boost a un campo specifico oa un intero documento.

+1

Ho ottenuto fino ad ora senza utilizzare il formato XML. Se utilizzo il formato XML, come faccio a caricare un file (PDF o HTML) come corpo del documento? –

+0

Spiacente, non ho notato che stavi usando ExtractingHandler ... La sintassi che usi per specificare un boost su un campo è corretta (boost.field = valore). Ma noto che stai aumentando il campo ID.Per essere efficace, un incremento dell'indice dovrebbe essere su un campo su cui effettuerai una query (vedi http://wiki.apache.org/solr/SolrRelevancyFAQ#index-time_boosts). –

+0

Grazie. Finalmente ho potuto farlo funzionare in questo modo: 'curl -s" http: // localhost: 8983/solr/update/extract? Literal.id =/mydoc.html & commit = false & boost.text = 3 "-F" miofile [email protected] "' Ho anche dovuto cambiare il mio modulo di ricerca per cercare esplicitamente il campo 'testo' che è dove tika mette tutti i contenuti dei PDF, ecc. Grazie. –

Problemi correlati