солнечное пятно рельсов не возвращает правильные результаты

У меня есть модель Foo с атрибутом listed.

Теперь я запускаю простой запрос солнечных пятен (solr)

foos = Foo.search do
      with :listed, true
end.results

Он возвращает все foos, у которых есть listed = true, кроме двух из них.

Я уже пробовал следующее:

Sunspot.remove_all
Foo.solr_index
Sunspot.commit
Foo.all.each(&:index!)

Любая помощь будет высоко оценена.


person Anshul Mengi    schedule 29.04.2015    source источник
comment
Просто чтобы добавить к этому. list уже определен как доступное для поиска поле в модели.   -  person Anshul Mengi    schedule 07.06.2015


Ответы (2)


Вам нужно инициировать доступный для поиска в вашей модели Foo

class Foo < ActiveRecord::Base

  searchable do
    boolean :listed
  end
end

затем переиндексировать Solr

bundle exec rake sunspot:reindex

or

Foo.reindex
Sunspot.commit
person Exsemt    schedule 29.04.2015
comment
Спасибо. Конечно, поле уже помечено как доступное для поиска. :) - person Anshul Mengi; 30.04.2015

В моем случае я использовал драгоценный камень под названием «acts_as_paranoid», чтобы после удаления объекта я обычно мог восстановить его. После того, как объект был уничтожен, он остается в подвешенном состоянии «удален» навсегда, если только я не вызову команду для его окончательного удаления. Это была моя проблема. Solr Sunspot все еще имеет индексы этих удаленных элементов, но не может их получить.

Я сделал следующее:

  • Навсегда удалить все предметы в подвешенном состоянии
  • Переиндексировать все объекты, принадлежащие этой модели

Вуаля! Вещи возвращаются корректно.

У меня случилось вчера, и это было даже лучше, когда комбинация встроенной пагинации solr, но это другая история.

Надеюсь, ваш похож.

person RoundOutTooSoon    schedule 22.09.2016