Я просматривал веб-сайты, ища индексацию и поисковую платформу и наткнулся на 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 + поля.
Я не использовал Solr, но использовал Lucene. При просмотре:
http://wiki.apache.org/solr/SolrQuerySyntax
В нем говорится, что синтаксис запросов Solr является надмножеством синтаксиса Lucene. А в Lucene вы можете выполнять усиление для каждого поля, используя оператор carrot, за которым следует какое-то произвольное значение, например
title: batman ^ 10 Alternative_title: batman
Преимущество выполнения этого во время запроса: что вы можете настроить значение ускорения на лету, чтобы оно соответствовало любому стандарту, который у вас есть. Так что, если значение ускорения 10 слишком велико, вы можете настроить его соответствующим образом.
Если это функциональность, которая относится не к одному поиску, а ко всему сайту. Вы можете увеличить заголовок во время индексации. Повышение дает полю более высокий балл релевантности, который звучит именно так, как вы хотите.
Перейдите по этой ссылке:
http://wiki.apache.org/solr/UpdateXmlMessages#Optional_attributes_for_.22field.22
Это то, для чего был разработан Solr's DismaxQueryParser. См. http://wiki.apache.org/solr/DisMaxRequestHandler
Параметров много, но главный, который вам нужно настроить, - это «qf», так вы указываете, в каких полях следует искать. и повышение для каждого. Поэтому, если вы хотите, чтобы заголовок преобладал, вы можете указать что-то вроде:
заголовок ^ 10 альтернативный_заголовок ^ 2 директор ^ 1 сюжет ^ 1
в качестве значения параметра qf. Вы можете настроить это, настроив пример конфигурации и экспериментируя оттуда.