繁体   English   中英

Searchkick - 具有多个模型和字段的自动完成

[英]Searchkick - Autocomplete with multiple models & fields

Searchkick - 具有多个模型和字段的自动完成

我正在努力为与我的Post model 关联的多个模型实现自动完成功能 搜索功能工作正常并返回预期数据。 如果我按照文档中的方式实现它,我的自动完成方法也可以正常工作(但仅适用于帖子的标题)。

我还通过将Post.index.name切换为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

我希望能够自动完成帖子的标题、标签的标题和用户的名。 我应该如何更改我的代码?

先感谢您!

searchkick的 multi_search :

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])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM