Boost Solr результаты, основанные на поле, которое содержит хит

Я просматривал Интернет в поисках структуры индексации и поиска и наткнулся на Solr. Функциональность, которая нам абсолютно необходима, заключается в повышении результатов в зависимости от того, какое поле содержало попадание.

Небольшой пример:

Рассмотрим такую запись:

<movie>
  <title>The Dark Knight</title>
  <alternative_title>Batman Begins 2</alternative_title>
  <year>2008</year>
  <director>Christopher Nolan</director>
  <plot>Batman, Gordon and Harvey Dent are forced to deal with the chaos unleashed by an anarchist mastermind known only as the Joker, as it drives each of them to their limits.</plot>
</movie>

Я хочу, например, объединить поля title, alternative_title и plot в одно поле поиска, что не является слишком сложным после просмотра документации и руководств по Solr/Lucene.
Однако я также хочу, чтобы фильмы с хитом в title имели более высокий балл, чем хиты по alternative_title а те, в свою очередь, должны иметь более высокий рейтинг, чем хиты в поле plot.
Есть ли способ указать этот вид оценки в XML или нам нужно разработать какой-то собственный алгоритм оценки?

Также обратите внимание, что приведенный мной пример вымышлен, и реальные данные, вероятно, будут содержать поля 100+.

Ответ 1

Это то, для чего был разработан Solr DismaxQueryParser. См. http://wiki.apache.org/solr/DisMaxRequestHandler

Есть много параметров, но главное, что вам нужно настроить, это "qf", так как вы указываете, какие поля нужно искать и что нужно для каждого. Поэтому, если вы хотите, чтобы название доминировало, вы можете указать что-то вроде:

title ^ 10 alternative_title ^ 2 director ^ 1 plot ^ 1

как значение параметра qf. Вы можете настроить это, настроив примерную конфигурацию и эксперимент оттуда.

Ответ 2

Я не использовал Solr, но я использовал Lucene. При взгляде на:

http://wiki.apache.org/solr/SolrQuerySyntax

В нем указано, что синтаксис запроса Solr является надмножеством Lucene. И в Lucene способ, которым вы можете выполнять усиление в каждом поле, - использовать оператор моркови, за которым следует какое-то произвольное значение, т.е.

title:batman^10 alternative_title:batman

Преимущество этого во время запроса заключается в том, что вы можете настроить значение повышения на лету, чтобы соответствовать любому стандарту релевантности, который у вас есть. Поэтому, если значение повышения 10 слишком велико, вы можете соответствующим образом настроить его.

Ответ 3

Если это функциональность, не относящаяся к одному поиску, а всему сайту. Вы можете увеличить заголовок во время индексации. Boosting дает поле более высокий балл релевантности, который звучит точно, что вы хотите.

Проверьте эту ссылку:

http://wiki.apache.org/solr/UpdateXmlMessages#Optional_attributes_for_.22field.22