当前位置: 首页 > 面试题库 >

Searchkick + Bloodhound + Typeahead自动完成

於英朗
2023-03-14
问题内容

我正在尝试为单个属性实现一个 简单的自动完成功能

模型:

searchkick text_start: [:name],autocomplete: ['name']

重新索引后,在 Rails控制台 上的行为就可以了。

2.2.0-p0 :002 >Doctor.search("a", autocomplete: true).map(&:name) 
gives the output-
 => ["a", "aa", "aaa", "aaaa"]

之后,我将自动完成操作添加到控制器,并将新路由添加到routes.rb文件。

控制器:

def autocomplete
    console.log("In auto")
    render json: Doctor.search(params[:query], autocomplete: false, limit: 10).map(&:name)
  end

路线:

resources :doctors do
    collection do
      get :autocomplete
    end
  end

在这一点上,如果我只是测试以下URL:

http://localhost:3000/doctors/autocomplete?query="a"

然后我在浏览器中得到了预期的结果

["a", "aa", "aaa", "aaaa"]

现在添加一个搜索框。

__header.html.erb:_

  <%= form_tag doctors_path, method: :get do %>
    <div class="form-group">
      <%= text_field_tag :query, params[:query], class: 'form-control typeahead', autocomplete: "off" %>
      <%= submit_tag 'Search', class: 'btn btn-primary' %>
    </div>
  <% end %>

最后是Javascript:

var ready;
ready = function() {
    var numbers = new Bloodhound({
      remote: {url: "/doctors/autocomplete?query=%QUERY"},
      datumTokenizer: function(d) { 
              return Bloodhound.tokenizers.whitespace(d.name); },
      queryTokenizer: Bloodhound.tokenizers.whitespace


});

// initialize the bloodhound suggestion engine

var promise = numbers.initialize();

promise
.done(function() { console.log('success!'); })
.fail(function() { console.log('err!'); });

// instantiate the typeahead UI
$( '.typeahead').typeahead(null, {
  displayKey: 'name',
  source: numbers.ttAdapter()
});
}

$(document).ready(ready);
$(document).on('page:load', ready);

这是使用的脚本标签:

<script type="text/javascript" src="https://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.js"></script>

搜索框在键入任何内容时没有显示任何响应,在Google Chrome浏览器的控制台上也没有显示任何错误。


问题答案:

您需要返回哈希值以响应您的自动完成操作:

def autocomplete
  render json: Doctor.search(params[:query], autocomplete: true, limit: 10).map {|doctor| {name: doctor.name, value: doctor.id}}
end


 类似资料:
  • 问题内容: 使用此处给出的单个属性进行搜索时,自动完成功能可以正常工作。 通过->根据此,可以自动完成具有(名称,城市,国家/地区)等多个属性 但是,这会导致自动完成下拉列表/建议显示为“未定义”。 对于提前输入,我正在使用: 在代码中,它被引用为: 由于返回了一组以上的数据,因此在typeahead js文件中是否需要进行某些更改? 问题答案: 您需要返回一个 您在控制器中的操作应如下所示: 添

  • 问题内容: 我有三个带有“ userName”字段的文档: ‘briandilley’ ‘briangumble’ ‘briangriffen’ 当我搜索 ‘brian’时,我将所有三个都按预期返回,但是当我搜索“布莱恩迪利”时,我仍然将所有三个都恢复了。分析API告诉我它在搜索字符串上使用了ngram过滤器,但我不确定为什么。这是我的设置: index settings: mapping: se

  • BloodHound 是一个强大的内网域渗透提权分析工具,构建于 Linkurious 之上。BloodHound 采用了原始的 PowerPath 概念背后的一些关键概念,并将这些概念放在一个能运行且直观,并易于使用的功能中,用于提取和分析数据,可以高效准确地显示如何提升AD域中的权限。它可以显示两个域中的“域管理员”组的有效成员。 BloodHound 是一个公共且免费的工具,它使用图形理论来

  • 问题内容: 我正在尝试实现一种预输入,其来源是一个API,该API希望使用GET请求,该请求具有数据主体,而不是url编码数据。我在“准备”对象中尝试了一些其他操作,但是无法将其用于url编码参数。是否可以使用typeahead或一般的jquery使其不执行此操作?我有一种感觉jquery可能只是不允许您这样做,因为这被认为是“不好的做法”,但是更改API并不是真正的选择!这是我的代码: 我正在使

  • Bloodhound (寻血猎犬) 是Apache的一个项目,提供了一个工具来跟踪项目的进展和缺陷,主要侧重于软件项目。Bloodhound 基于著名的 Trac 项目,提供问题跟踪、储存、方便的浏览和简单的wiki语法参考。Bloodhound 的目的是为多个软件项目管理提供直观的支持、先进友好的 UI 接口和安装简单的一些最重要的 Trac的默认提供的插件。

  • 问题内容: 如何使用Redis实现自动完成功能? 比如说我有一个数组。当我型我得到 我希望你明白这一点。我如何有效地使用redis命令来实现这一点(如果可能,但我认为是)。如果我能通过telnet尝试一些简单的命令来模仿这种行为,那就太好了。 谢谢 问题答案: 如果您要处理的是大型数据集,建议您考虑将其实现。我将一小部分Ruby做到了这一点: 例如: 在Wikipedia的Tries条目上阅读有关