Solr Sunpost взаимодействие между двумя приложениями
Я разработал приложение с рельсами и полнотекстовым поиском.
Здесь пользователи могут опубликовать тему. А пользователю нужно дождаться одобрения поста от администратора.
Например: если пользователь публикует тему в domain.com
и утверждение сделано из admin.domain.com
@search = Post.where(status: 1).search do
fulltext params[:search] do
minimum_match 1
end
with :status, 1
paginate page: params[:page], per_page: 15
end
@posts = @search.results
Если администратор не утвердит статус сообщения будет 2
, В администраторе, если я изменю статус с 2 на 1 с администратора, я не смог найти результат. Как я могу связать с этим.
Как я могу справиться с такой проблемой. Может ли кто-нибудь помочь
Edit-1
Я собираюсь сделать это как вопрос щедрости. Я сталкиваюсь с большими трудностями с этим. Может ли кто-нибудь решить эту проблему с помощью лучшего решения, иначе кто-нибудь знает какой-либо другой способ выполнения такого поиска
1 ответ
Если у вас есть 2 приложения, я предполагаю, что они использовали одну и ту же базу данных, но солнечное пятно использует только ваше основное приложение.
Проблема в том, что когда администратор обновляет объект, этот объект не переиндексируется в sunspot / solr.
Вариант 1 Добавьте солнечное пятно в ваше приложение администратора с тем же блоком поиска для соответствующих моделей и использовали ту же конфигурацию сервера solr.
Вариант 2 Создайте собственный метод контроллера (например, API) в вашем основном приложении. Этот метод вызывает переиндексацию объекта типа Sunspot.index Post.find(params[:id])
После каждого обновления сообщения в вашем приложении администратора вам нужно вызывать метод переиндексации вашего основного приложения.
Вариант 3 (самый простой) Снимите сферу: статус, как это:
@search = Post.where(status: 1).search do
fulltext params[:search] do
minimum_match 1
end
paginate page: params[:page], per_page: 15
end
@posts = @search.results
редактировать
Это обновление добавляет дополнительную информацию для использования варианта 1:
Я создаю приложение с одной моделью: Статья
class Article < ActiveRecord::Base
searchable do
text :title, :boost => 5
text :content
integer :status
end
end
Я хочу показать все статьи в моем приложении администратора и только статьи со статусом =1 в моем пользовательском приложении. Оба приложения используют одну базу данных и один и тот же сервер Solr.
Конфигурация для обоих приложений
Я использую sunspot_rails ( https://github.com/sunspot/sunspot) и sunspot_solr для этого теста.
#Gemfile
gem 'sunspot_rails'
group :development do
gem 'sunspot_solr'
end
#config/database.yml
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
#config/sunspot.yml use same host and same port for both applications
development:
solr:
hostname: localhost
port: 8982
log_level: INFO
path: /solr/development
Примечание: с помощью этой команды я запускаю solr только один раз в пользовательском приложении
bundle exec rake sunspot:solr:start
Контроллер статьи для приложения администратора
Я хочу показать все статьи в моем приложении администратора следующим образом:
def index
@search = Article.search do
fulltext params[:search]
end
@articles = @search.results
end
Контроллер статей для пользовательского приложения
В моем пользовательском приложении я просто хочу видеть статьи со статутами == 1
def index
@search = Article.search do
fulltext params[:search]
with :status,1
end
@articles = @search.results
end
Теперь, когда я использую свое приложение администратора, и я обновляю статус solr обновляется одновременно. И если я обновлю свою индексную страницу статей в моем основном приложении, эта статья появится.
Я надеюсь, что у вас есть больше информации сейчас.