索引没有活动记录的elasticsearch

时间:2014-03-03 14:13:04

标签: ruby-on-rails ruby ruby-on-rails-3 elasticsearch tire

如果没有活动记录,如何在弹性搜索上使用索引? 但是model.rb就像这样指定

class Article
  MIN_TERM_CHARS = 2
  MAX_NGRAM_CHARS = 20

  include SyncAttr
  include Tire::Model::Persistence


  index_name { Thread.current[:index_name] || "test" }
    document_type "document"

   # TODO: set index_options to doc for some fields for optimization

   # TODO: maybe use simple analyzer for 'id' fieldsart
  property :artikelnummer, type: 'string', index: 'not_analyzed'
  property :eannummer, type: 'string', index: 'not_analyzed'

  property :bezeichnung, type: 'multi_field', fields: {
    bezeichnung: {type: 'string'},
    ngram: {:type => 'string', :index_analyzer => 'ngram_index_analyzer', :search_analyzer => 'ngram_search_analyzer'},
    suggest: {:type => 'string', :analyzer => 'suggest_analyzer'}
  }

我想索引我的数据。我怎样才能做到这一点? 我正在使用tire/karmi来实现此目标

2 个答案:

答案 0 :(得分:2)

karmi/tire gem已经(re)tired

  

自2013年9月起,它已经退休,因为新的图书馆,   https://github.com/elasticsearch/elasticsearch-ruby,已经   当时发布。

     

Elasticsearch的新elasticsearch Ruby gem不支持所有   轮胎的高果糖高级DSL,或者   搜索结果与Rails助手的自动兼容性,如   url_for或模型的丰富集成。

查看elasticsearch-ruby获取弹性搜索API的更新的ruby包装。

修改

只是为了澄清 - tire仍然有用,但作者建议你转移到新的宝石:

  

如果您在项目中使用Tire,或考虑开始使用它,   这些是重点:

     
      
  1. 库将继续工作,直到现在为止。事实上,它肯定会更好,因为错误将是固定且重要的   将添加功能。

  2.   
  3. 所有网址将继续有效,并由浏览器,Git或Bundler正确重定向。除非,否则无需更改它们   你想要。

  4.   
  5. 该项目已重命名,以提高此迁移的可见性,而不仅仅是为了好玩。

  6.   

新gem的基本API用法(来自documentation):

  

使用elasticsearch gem

     

当您使用elasticsearch-ruby包中的客户端时,   库模块已经包含在内,因此您只需调用API即可   方法:

require 'elasticsearch'

client = Elasticsearch::Client.new log: true

client.index  index: 'myindex', type: 'mytype', id: 1, body: { title: 'Test' }
# => {"_index"=>"myindex", ... "created"=>true}

client.search index: 'myindex', body: { query: { match: { title: 'test' } } }
# => {"took"=>2, ..., "hits"=>{"total":5, ...}}

答案 1 :(得分:1)

要索引非模型支持的对象,您可以使用Uri引用的elasticsearch-ruby API(使用client.create语法)。 Elasticsearch-ruby只是Elasticsearch的Ruby连接器,因此您可以使用常规curl请求执行任何操作,您可以使用API​​,包括设置自定义映射,添加文档和执行搜索。我不确定是否有使用Tire索引非模型支持对象的方法,但我知道Tire可以搜索任何索引,包括未通过Tire设置的索引(例如您自定义索引&# 39;使用elasticsearch-ruby进行设置。

通过包含Tire::Persistence模块,您还可以使用Tire索引模型支持的对象,同时完全绕过ActiveRecord (而不是使用ActiveRecord回调)。为了让它发挥作用:

  • 在您的模型类中包含Tire::Persistence模块(正如您所做的那样)。

  • config/application.rb中停用ActiveRecord,将行require 'rails/all'替换为:

require "rails" [ # 'active_record', 'action_controller', 'action_mailer', 'active_resource', 'rails/test_unit', ].each do |framework| begin require "#{framework}/railtie" rescue LoadError end end

  • 删除config/database.yml

  • 从Gemfile中删除' gem sqlite3',或者您使用的任何数据库gem。

  • 运行bundle install

有关详细信息,请参阅this blog post;有关使用Elasticsearch索引对象而非ActiveRecord的工作模型的完整示例,请参阅this stackoverflow question