Algolia 搜索 - 无法在本地重建索引

Algolia search - Unable to reindex locally

我是第一次使用 Algolia 并尝试在本地重新编制索引,但它抛出了以下错误:

Algolia::AlgoliaError: API not initialized

2016-09-30T06:18:00.071Z 50262 TID-oxqk9ev1w WARN: {"class":"Search::SomeWorker","args":[2,false],"retry":5,"queue":"default","jid":"1519b78812e13d6df5fdb6a9","created_at":1475216280.067702,"enqueued_at":1475216280.067759,**"error_message":"API not initialized","error_class":"Algolia::AlgoliaError"**,"failed_at":1475216280.0707068,"retry_count":0}
**2016-09-30T06:18:00.071Z 50262 TID-oxqk9ev1w WARN: Algolia::AlgoliaError: API not initialized**
2016-09-30T06:18:00.071Z 50262 TID-oxqk9ev1w WARN: /Users/xxx/.rvm/gems/ruby-2.3.1@foro/gems/algoliasearch-1.11.0/lib/algolia/client.rb:657:in `client'
/Users/xxx/.rvm/gems/ruby-2.3.1@foro/gems/algoliasearch-1.11.0/lib/algolia/index.rb:11:in `initialize'
/Users/xxx/.rvm/gems/ruby-2.3.1@foro/gems/algoliasearch-rails-1.15.0/lib/algoliasearch-rails.rb:229:in `new'
/Users/xxx/.rvm/gems/ruby-2.3.1@foro/gems/algoliasearch-rails-1.15.0/lib/algoliasearch-rails.rb:229:in `initialize'
/Users/xxx/.rvm/gems/ruby-2.3.1@foro/gems/algoliasearch-rails-1.15.0/lib/algoliasearch-rails.rb:647:in `new'
/Users/xxx/.rvm/gems/ruby-2.3.1@foro/gems/algoliasearch-rails-1.15.0/lib/algoliasearch-rails.rb:647:in `algolia_ensure_init'
/Users/xxx/.rvm/gems/ruby-2.3.1@foro/gems/algoliasearch-rails-1.15.0/lib/algoliasearch-rails.rb:492:in `block in algolia_index!'
/Users/xxx/.rvm/gems/ruby-2.3.1@foro/gems/algoliasearch-rails-1.15.0/lib/algoliasearch-rails.rb:489:in `each'
/Users/xxx/.rvm/gems/ruby-2.3.1@foro/gems/algoliasearch-rails-1.15.0/lib/algoliasearch-rails.rb:489:in `algolia_index!'
/Users/xxx/.rvm/gems/ruby-2.3.1@foro/gems/algoliasearch-rails-1.15.0/lib/algoliasearch-rails.rb:792:in `algolia_index!'

我连接到 Algolia 客户端没有问题,如下所示:

[1] pry(main)> Algolia::Client.new(application_id: xxx, api_key: xxx)
=> #<Algolia::Client:0x007fe100329f40
 @api_key="xxx",
 @application_id="xxx",
 @batch_timeout=120,
 @connect_timeout=2,
 @headers=
  {"X-Algolia-API-Key"=>"xxx",
   "X-Algolia-Application-Id"=>"xxx",
   "Content-Type"=>"application/json; charset=utf-8",
   "User-Agent"=>"Algolia for Ruby 1.11.0"},
 @hosts=["xxx.algolia.net", "xxx-1.algolianet.com", "xxx-3.algolianet.com", "xxx-2.algolianet.com"],
 @receive_timeout=30,
 @search_hosts=["xxx-dsn.algolia.net", "xxx-2.algolianet.com", "xxx-1.algolianet.com", "xxx-3.algolianet.com"],
 @search_timeout=5,
 @send_timeout=30,
 @ssl=true,
 @ssl_version=nil>

任何帮助都会很棒。

这可能是因为您 mixing up the 2 ways 使用基础 Ruby API 客户端。有两种方法可以使用 Algolia Ruby API 客户端:

  • 使用单例设计模式(1 个全局 API 客户端);
  • 或使用常规的 N 个客户端实例。

看起来你正在尝试使用 Rails 集成,假设你已经在全局初始化了底层 API 客户端(使用单例设计模式)。

使用 Rails 集成,而不是调用 Algolia::Client.new 你应该使用:

AlgoliaSearch.configuration = { application_id: 'xxx', api_key: 'xxx' }
# this will call Algolia.init

您可以找到更多文档 on GitHub


如果您想使用底层 Ruby API 客户端,而不需要 Rails 集成;您可以选择:

使用原始 Ruby API 客户端,单例方式:

Algolia.init application_id: 'xxx', api_key: 'xxx'
index = Algolia::Index.new('myindex') # it will use the API client initialised globally
index.add_objects(...)

使用原始 Ruby API 客户端,N 实例方式:

client = Algolia::Client.new application_id: 'xxx', api_key: 'xxx'
index = client.init_index('myindex')
index.add_objects(...)