如果没有活动记录,如何在弹性搜索上使用索引? 但是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来实现此目标
答案 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,或考虑开始使用它, 这些是重点:
库将继续工作,直到现在为止。事实上,它肯定会更好,因为错误将是固定且重要的 将添加功能。
所有网址将继续有效,并由浏览器,Git或Bundler正确重定向。除非,否则无需更改它们 你想要。
- 醇>
该项目已重命名,以提高此迁移的可见性,而不仅仅是为了好玩。
新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。