Как повысить уровень документа SOLR при индексировании с помощью / solr / update

Для индексации моего веб-сайта у меня есть сценарий 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-запросу?

Я пытался:

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) Указать повышение для определенных документов.


person Dan Tenenbaum    schedule 09.02.2011    source источник


Ответы (1)


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

person Pascal Dimassimo    schedule 09.02.2011
comment
До сих пор я обходился без формата XML. Если я использую формат XML, как мне загрузить файл (PDF или HTML) в качестве тела документа? - person Dan Tenenbaum; 09.02.2011
comment
Извините, я не заметил, что вы использовали ExtractingHandler ... Синтаксис, который вы используете для указания повышения в поле, правильный (boost.field = value). Но я заметил, что вы увеличиваете поле id. Чтобы быть эффективным, увеличение времени индексации должно происходить в поле, по которому вы будете запрашивать (см. wiki.apache.org/solr/SolrRelevancyFAQ#index-time_boosts). - person Pascal Dimassimo; 09.02.2011
comment
Спасибо. Наконец-то я заставил его работать, сделав что-то вроде этого: curl -s "http://localhost:8983/solr/update/extract?literal.id=/mydoc.html&commit=false&boost.text=3" -F "[email protected]" Мне также пришлось изменить свою форму поиска, чтобы явно искать в поле «текст», в которое tika помещает все содержимое PDF-файлов и т. Д. Спасибо. - person Dan Tenenbaum; 09.02.2011