Searchkick - Автозаполнение с несколькими моделями и полями - PullRequest
0 голосов
/ 26 мая 2020

Searchkick - Автозаполнение с несколькими моделями и полями

Я изо всех сил пытаюсь реализовать функцию автозаполнения для нескольких моделей, связанных с моей моделью Post. Функция поиска работает нормально и возвращает ожидаемые данные. Мой метод автозаполнения также отлично работает, если я реализую его так, как это сделано в документации (однако только для заголовка сообщений).

Я также пробовал этот ответ и этот один путем переключения Post.index.name на Post.searchkick_index.name, но функция автозаполнения не отображается.

Это код, который я написал в posts_controller.rb:

def autocomplete
    render json: Post.search(params[:query],
                             index_name: [
                               Post.searchkick_index.name,
                               Tag.searchkick_index.name,
                               User.searchkick_index.name
                              ],
                             limit: 10,
                             load: false,
                             misspellings: { below: 5 })
end

Я также пробовал:

def autocomplete
  render json: Searchkick.search(params[:query],
                                 models: [Post, Tag, User],
                                 limit: 10,
                                 load: false,
                                 misspellings: { below: 5 })
end

Я не получаю ошибок с приведенным выше кодом, но функция автозаполнения также не работает.

В post.rb:

class Post < ApplicationRecord
  belongs_to :user
  has_many :comments, dependent: :destroy
  has_many :posts_tags, dependent: :destroy
  has_many :tags, through: :posts_tags

  searchkick word_start: %i[title]

  def search_data
    {
      title: title,
      description: description,
      user: user.full_name
    }.merge(
      tag: tags.map(&:title),
      comments: comments.map(&:description)
    )
  end
end

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

def autocomplete
  posts = Post.search(params[:query], execute: false)
  tags = Tag.search(params[:query], execute: false)
  users = User.search(params[:query], execute: false)

  render json: Searchkick.multi_search([posts, tags, users])
end

Это возвращает следующую ошибку: fatal - exception reentered.

Я хочу иметь возможность автозаполнения сообщения title , тега title и пользователя full_name . Как мне изменить свой код?

Заранее спасибо!

1 Ответ

0 голосов
/ 26 мая 2020

От multi_search searchkick:

posts = Post.search(params[:query], execute: false)
tags = Tag.search(params[:query], execute: false)
users = User.search(params[:query], execute: false)

Searchkick.multi_search([posts, tags, users])
...