Apache Solr. Filtered query results by term occurrences in certain fields.

На текущем проекте для полнотекстового поиска используется Apache Solr. Для взаимодействия с solr используется гем Sunspot.

Была поставлена задача: в результатах поиска выводить только те результаты, в которых запрос содержится более чем один раз в определенных полях. В моем случае это было два поля. Была составлена вот такая табличка с соответствиями:

Поле1

Поле2

Результат

слово не попадает
слово не попадает
слово слово попадает
слово слово попадает
слово слово попадает

Для решения я добавил function query. Sunspot рекомендует делать это так:

Post.search do
  adjust_solr_params do |params|
    params[:q] = "{!lucene q.op=AND df=title} bob"
  end
end

Соответственно я добавил function query для фильтрации поисковых результатов:

params[:fq] = ["type:MyModel","{!frange l=2}{!func}sum(termfreq(field1_text,'#{search_query}'),termfreq(field2_text,'#{search_query}'))"]
Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s