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 обновляется одновременно. И если я обновлю свою индексную страницу статей в моем основном приложении, эта статья появится.

Я надеюсь, что у вас есть больше информации сейчас.

Другие вопросы по тегам