Как увеличить документ SOLR при индексации с помощью / solr / update - PullRequest
5 голосов
/ 09 февраля 2011

Чтобы проиндексировать мой сайт, у меня есть скрипт Ruby, который, в свою очередь, генерирует скрипт оболочки, который загружает каждый файл в корне моего документа в Solr.Сценарий оболочки имеет много строк, которые выглядят следующим образом:

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

... и оканчивается на:

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

Это загружает все документы из корня моего документа в Solr.Я использую tika и ExtractingRequestHandler для загрузки документов в различные форматы (в основном, PDF и HTML) в Solr.

В сценарии, который генерирует этот сценарий оболочки, я хотел бы повысить некоторые документы на основесоответствует ли их поле id (a / k / a url) определенным регулярным выражениям.

Допустим, это правила повышения (псевдокод):

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

Какой самый простой способ добавить это увеличение индекса в мой запрос http?

Iпробовал:

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

и:

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

Ни один не сделал различий в порядке результатов поиска.Я хочу, чтобы расширенные результаты были на первом месте в результатах поиска, независимо от того, что пользователь искал (при условии, конечно, что документ содержит их запрос).

Я понимаю, что если я POST в формате XML, я могу указать значение повышения для всего документа или конкретного поля.Но если я это сделаю, не ясно, как указать файл в качестве содержимого документа.На самом деле, tika page предоставляет частичный пример:

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

Но опять же неясно, где / как указать мой импульс.Я пытался:

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

и

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

Ни один из которых не изменил результаты поиска.

Есть ли способ обновить только атрибут boost документа (неконкретное поле) без изменения содержимого документа?Если это так, я мог бы достичь своей цели в два этапа: 1) загрузить / проиндексировать документ, как я это делал 2) указать повышение для определенных документов

1 Ответ

3 голосов
/ 09 февраля 2011

Чтобы проиндексировать документ в Solr, вы должны отправить его в обработчик / update.Документы для индексации помещаются в тело запроса POST.В общем, вы должны использовать формат xml формата Solr .Используя этот xml, вы можете добавить значение повышения к определенному полю или ко всему документу.

...