sunspot-solr: Как исключить результаты поиска, содержащие любое заданное слово?

У меня есть приложение Ruby on Rails, которое использует solr. Я использую камень солнечных пятен для этого. Я также использую websolr для производственной среды.

Я знаю, что мы можем выполнять полнотекстовый поиск с помощью sunspot solr. Но я также хочу иметь возможность исключать любое попадание (и, в конечном итоге, результат), в котором есть заданное слово.

Пример класса:

class Article
    searchable do
        text :title
        text :content
    end
end

Теперь я хочу найти статьи, в содержании которых есть Обама, но также хочу исключить те, которые также содержат слово "Леди Гага"< /сильный>. Я знаю, что могу применить блокировку отклонения к возвращаемому массиву результатов, но я хочу обработать эту ситуацию на уровне Solr.

Надеюсь, я ясно изложил свою проблему.

Заранее спасибо за помощь.


person İlker İnanç    schedule 06.12.2012    source источник


Ответы (2)


Из https://github.com/sunspot/sunspot/wiki/Fulltext-search

Анализируется небольшое подмножество обычного логического синтаксиса запроса: в частности, для разграничения фраз можно использовать хорошо совпадающие кавычки, а операторы + и - можно использовать для обязательного или исключающего слова соответственно

Это то, что вы искали?

person Alistair A. Israel    schedule 07.12.2012
comment
это кажется решением, но можете ли вы привести пример использования? Я не мог использовать полный текст Обама-Леди Гага или полный текст Обама-Леди Гага. - person İlker İnanç; 07.12.2012
comment
Ну, в частности, я попробовал Job.search { keywords "java -'software engineer'" }, и, похоже, он работает в нашем приложении. - person Alistair A. Israel; 07.12.2012

Я бы использовал adjust_solr_params для использования edismax с отрицательным предложением.

Article.search do
  fulltext params[:q]
  adjust_solr_params do |solr|
    solr['defType'] = 'edismax'
    solr['q'] += %( -"some phrase to exclude")
  end
end

Не самый очевидный подход, уж точно не задокументированный, и я его не тестировал, но он должен работать. Надеемся, что будущие версии Sunspot будут более естественно поддерживать edismax.

person Nick Zadrozny    schedule 07.12.2012
comment
Что касается метода Adjust_solr_params: этот метод не поддерживается, и ваш пробег может отличаться. из rubydoc.info/gems/sunspot/2.1.1 / - person bunufi; 04.11.2020