Какова формула для расчета результата попадания в Sunspot on Rails? - PullRequest
3 голосов
/ 02 сентября 2011

Скажем, у меня есть этот код в моей модели:

class Facility < ActiveRecord::Base
...
searchable do
  text :name
  text :facility_type do
end
...

И это в контроллере поиска:

 @search = Facility.search do
    keywords(query) do
      boost_fields :name =>  1.9,
                   :facility_type => 1.98
    end
    ...

И у меня есть два объекта Facility - первый из которых имеет тип "cafe ", но без названия" cafe "в названии, например, второе, называемое" cafe sun ", но на самом деле оно типа" bar ".

Я запускаю поиск сquery = "cafe" и получите оба объекта в ответе, но счет равен 5.003391 для "кафе sun" и 1.250491 для настоящего "cafe"

Для второй попытки я установил

boost_fields :name =>  1.9, :facility_type => 3

Оценка «кафе солнце» не меняется, но «кафе» несколько выросла - 1,8896824

Итак, пока результаты сортируются по результату, меня интересует, как он рассчитывается?

Или я выбираю неправильные токенизаторы или что-то еще, вот что у меня есть в schema.xml

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory"
            minGramSize="3"
            maxGramSize="30"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

1 Ответ

2 голосов
/ 03 сентября 2011

Оценка результатов является областью библиотеки Lucene, и суть ее алгоритма подробно описана здесь:

Чтобы проверить необработанные данные скоринга, выполните запрос непосредственно к экземпляру Solr и добавьте параметр debugQuery=on, чтобы просмотреть данные скоринга.

http://localhost:8983/solr/select?q=test&defType=dismax&qf=name_text+facility_type_text&debugQuery=on

Для общей оптимизации релевантности в Solr вы можете обратиться к SolrRelevancyFAQ . У него также есть один вопрос, специально демонстрирующий вывод debugQuery

В целом: вы задаете очень хороший вопрос с очень глубоким ответом. Я могу отредактировать свой ответ в будущем, чтобы расширить тему.

...