Добавление повышения даты в сложные запросы SOLR - PullRequest
4 голосов
/ 01 февраля 2010

У меня в настоящее время есть запрос SOLR, который использует запрос (q), поля запроса (qf) и поля фразы (pf) для получения желаемых результатов. Пример:

/solr/select
?q=superbowl
&qf=title^3+headline^2+intro+fulltext
&pf=title^3+headline^2+intro+fulltext
&fl=id,title,ts_modified,score
&debugQuery=true

Идея состоит в том, что заголовок и заголовок "основного элемента" дают лучшее представление о том, что является результатом "примерно", но вводная часть и полный текст также предоставляют некоторую информацию. Т.е. представьте коллекцию ссылок, в которой сама коллекция содержит метаданные (то, чем она является), но каждая ссылка имеет свои собственные данные (название ссылки, краткий обзор и т. Д.). Если мы ищем «superbowl», наиболее релевантными являются результаты с «superbowl» в метаданных коллекции, наименее релевантными являются результаты с «superbowl» в кратком обзоре одной из ссылок ... но они все действительные результаты.

То, что я пытаюсь сделать, - это повысить оценку релевантности, чтобы самые последние результаты перемещались вверх, но сохраняя заголовок, заголовок, вступление, полный текст как часть формулы. Недавний результат со строкой поиска в метаданных коллекции будет более релевантным, чем результат, содержащий только метаданные ссылок ... но недавний результат "только ссылки" может быть более релевантным, чем очень старый результат со строкой поиска в метаданные коллекции. (Надеюсь, это понятно).

Проблема в том, что я не могу понять, как объединить функцию наддува, задокументированную на сайте SOLR, с использованием полей qf / pf. В частности ...

На сайте SOLR что-то вроде следующего работает для увеличения результатов по дате:

/solr/select
?q={!boost%20b=$dateboost%20v=$qq}
&dateboost=ord(ts_modified)
&qq=superbowl
&fl=ts_modified,score
&debugQuery=true

Однако я не могу понять, как объединить этот запрос с использованием qf и pf. Любые предложения будут более чем приветствоваться.

Благодаря ответу Данбена я смог придумать следующее:

/solr/select
?q={!boost%20b=$dateboost%20v=$qq%20defType=dismax}
&dateboost=ord(ts_modified)
&qq=superbowl
&qf=title^3+headline^2+intro^2+fulltext
&pf=title^3+headline^2+intro^2+fulltext
&fl=ts_modifieds,score
&debugQuery=true

Похоже, у меня были настоящие проблемы:

  • Я оставил пробелы в параметре q вместо экранирования (% 20) при копировании / вставке
  • Я не включил defType = dismax в свой параметр q, чтобы он обращал внимание на параметры qf / pf

Ответы [ 2 ]

4 голосов
/ 01 февраля 2010

Выезд http://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_boost_the_score_of_newer_documents

Это основано на функции мс , которая возвращает разницу в миллисекундах между двумя временными метками / датами, и ReciprocalFloatFunction , которая увеличивается с уменьшением передаваемого значения.

Поскольку вы используете DisMaxRequestHandler, вам может потребоваться указать ваш запрос, используя параметры bq / bf. От http://lucene.apache.org/solr/api/org/apache/solr/handler/DisMaxRequestHandler.html:

bq - (Boost Query) необработанный запрос lucene, который будет включен в запрос пользователей, чтобы повлиять на оценку. Если это BooleanQuery со значением по умолчанию повышение (1.0f), затем индивидуальный пункты будут добавлены непосредственно в основной запрос. В противном случае запрос будет быть включенным как есть. Этот параметр может быть указано несколько раз, а бусты являются аддитивными. Обратите внимание вышеупомянутое поведение только в эффект, если один параметр bq указано. Следовательно, вы можете отключить его указав дополнительный, пустой, БК параметр.

bf - (Boost Functions) функции (с дополнительными бустами), которые будут включены в запрос пользователей к повлиять на счет. Формат: «FuncA (арг1, арг2) ^ 1.2 funcB (arg3, arg4) ^ 2.2 ". ПРИМЕЧАНИЕ. Пробелы в аргументы функции. Этот параметр может быть указано несколько раз, а функции аддитивны.

0 голосов
/ 03 мая 2013

Вот хорошая статья о результатах поиска в Solr:

http://www.metaltoad.com/blog/date-boosting-solr-drupal-search-results


В Drupal это может быть просто достигнуто с помощью следующего кода:

с использованием модуля Apachesolr

/**
 * Implements hook_apachesolr_query_alter().
 */
function hook_search_apachesolr_query_alter(DrupalSolrQueryInterface $query) {
  $query->addParam('bf', array('freshness' =>
    'recip(abs(ms(NOW/HOUR,dm_field_date)),3.16e-11,1,.1)'
  ));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...