Результаты Boost Solr основаны на поле, содержащем попадание - PullRequest
14 голосов
/ 11 марта 2010

Я просматривал Интернет в поисках структуры индексации и поиска и наткнулся на 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 полей.

Ответы [ 3 ]

11 голосов
/ 15 марта 2010

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

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

title ^ 10 alternative_title ^ 2 директор ^ 1 сюжет ^ 1

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

6 голосов
/ 12 марта 2010

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

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

В нем говорится, что синтаксис запроса Solr является расширенным набором Lucene. А в Lucene способ повышения уровня для каждого поля заключается в использовании оператора моркови, за которым следует произвольное значение, т. Е.

title:batman^10 alternative_title:batman

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

1 голос
/ 11 марта 2010

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

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

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

...