Приложение Rails плохо связывается с Elasticsearch через Chewy - PullRequest
0 голосов
/ 14 февраля 2020

Я пробую этот урок: https://medium.com/manato/chewy-gem-with-active-model-serializers-in-ruby-on-rails-5-2-3-a6f88e0330b5

Однако я столкнулся с некоторыми проблемами. Мое приложение rails не может найти индексы эластичного поиска плавно.

Когда я выполняю запрос из браузера, в браузере возникает следующая ошибка:

uninitialized constant UsersController::UsersIndex Did you mean? UserIndex

Затем я go переведу на свой контроллер и изменит метод UsersIndex на UserIndex.

class UsersController < ApplicationController
    def search
      @users = UserIndex.query(query_string: { fields: [:name, :email, :phone], query: search_params[:query], default_operator: 'and' })
      #from UsersIndex to UserIndex
      
      
        render json: hash, status: :ok
    end
  
    private
  
    def search_params
      params.permit(:query, :page, :per)
    end
  end
  

Затем я сделаю запрос снова. На этот раз он покажет ошибку

expected file /Users/jason/Code/chewytutorial/tutorial2/my-chewy-app/app/chewy/user_index.rb to define constant UserIndex, but didn't

Далее я снова изменю его с UserIndex на UsersIndex

class UsersController < ApplicationController
    def search
      @users = UserIndex.query(query_string: { fields: [:name, :email, :phone], query: search_params[:query], default_operator: 'and' })
      #from UserIndex to UsersIndex


       render json: @users.to_json, status: :ok
    end

    private

    def search_params
      params.permit(:query, :page, :per)
    end
  end

На этот раз он успешно отобразит результат запроса.

Это соответствующие коды Chewy и Rails

Chewy Index
    class UsersIndex < Chewy::Index
      settings analysis: {
        analyzer: {
          email: {
            tokenizer: 'keyword',
            filter: ['lowercase']
          }
        }
      }

      define_type User do
        field :name
        field :email, analyzer: 'email'
        field :phone
      end
    end


Model
class User < ApplicationRecord
  update_index('users#user') { self }
  enum status: { unconfirmed: 0, confirmed: 1 }
end
...