gpt4 book ai didi

ruby-on-rails - searchkick/elasticsearch 设置具有多个属性的自动完成

转载 作者:行者123 更新时间:2023-11-29 02:52:13 24 4
gpt4 key购买 nike

我已经使用 searchkick gem 设置了我的应用程序,并且正在为我的 Presenters 索引开发自动完成功能。我的问题是我正在搜索多个字段(名字和姓氏),虽然我可以通过这两个字段搜索演示者 - 例如,如果我有演示者“Jennifer Hall”,我可以输入“Jennifer”或“Hall” ' 和名称 'Jennifer Hall' 将出现在自动完成下拉列表中,但如果我键入 'Jennifer '(添加空格后),该名称将消失并且没有更多建议。我的问题是我该如何解决这个问题?

我的代码

我已遵循本教程: Adding search and autocomplete to a Rails app with Elasticsearch

presenter.rb:

class Presenter < ActiveRecord::Base
searchkick autocomplete: ['first_name', 'last_name'],
suggest: ['first_name', 'last_name']

...
end

presenters_controller.rb:

class PresentersController < ApplicationController
def index
if params[:query].present?
@presenters = Presenter.search(params[:query],
fields: [:first_name, :last_name],
page: params[:page])
else
@presenters = Presenter.all.page params[:page]
end
end

def autocomplete
render json: Presenter.search(params[:query],
autocomplete: true,
fields: [:first_name, :last_name],
limit: 10).map { |presenter|
presenter.first_name + " " + presenter.last_name
}
end

...
end

我得到了 .map{ |presenter|等等 } 来自这里的想法:

how do i map multiple attributes in rails with searchkick gem

但是,当我完全按照解决方案进行操作时,我在建议名称的下拉列表中只得到了“未定义”。将其更改为 presenter.first_name + ""+ presenter.last_name 使全名出现在下拉列表中。

路线.rb:

  resources :presenters, :only => [:index, :show] do
collection do
get :autocomplete
end

index.html.haml:

.container
= form_tag presenters_path, method: :get do
- if params[:query].present?
.btn-search.btn-clearsearch
= link_to "clear", presenters_path
- else
.search
Search
= text_field_tag :query, params[:query],
id: "presenter_search",
autocomplete: "off"
= submit_tag "go", class: "btn-search"

我正在使用 typeahead.js,所以它适用于:

应用程序.html.haml:

= javascript_include_tag 'application'
= javascript_include_tag
"//cdnjs.cloudflare.com/ajax/libs/typeahead.js/0.9.3/typeahead.min.js"

presenter.js.coffee:

$ ->
$('#presenter_search').typeahead
name: "presenter"
remote: "/presenters/autocomplete?query=%QUERY"

所以,再一次,我的问题是,如果我输入名字,所有匹配该名字的选项都会出现在下拉列表中(包括名字和姓氏),但是一旦我输入空格,整个建议列表消失了。我无法搜索任何名字和姓氏“Jennifer H”。我可以猜测问题出在 Controller /自动完成操作中的映射,但是键入:

.map(&:first_name, &:last_name)

.map(&:first_name, :last_name)

产生错误,并且

.map{ |presenter| presenter.slice(:first_name, :last_name) }

使下拉列表中的所有建议都显示为“未定义”。

关于如何解决这个问题有什么建议吗?

最佳答案

希望这对您有所帮助。记得用 rake searchkick 重新索引:reindex CLASS=Model_name

// in model

def full_name
[first_name, last_name].join(' ')
end

searchkick text_middle: ['full_name'], autocomplete: ['full_name']

def search_data
{
full_name: full_name
}
end

// in controller
users = User.search params[:query], fields: [{"full_name" => :text_middle}]

关于ruby-on-rails - searchkick/elasticsearch 设置具有多个属性的自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26518584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com