1

我正在使用 Tire 来实现 Elasticsearch。我的环境是 Linux,Rails 3.2 和 Ruby 1.9.3。我可以在 gem Tire(0.5.8) 的帮助下使用 Elasticsearch 进行索引。但现在为了提高性能,我想从索引数据中显示数据,而不是命中数据库(我只想将 db 用于 INSERT 和 UPDATE)。

为此,我使用以下代码:

result = Tire.search 'jobs', load: true do

  query do
    string "is_active:1"
  end
  filter :range,  status: {gte: 0 }
  sort { by :created_at, 'desc' }
 end

  return result.results

由于我使用的是 load:true 它会命中我不想要的数据库(MySQL)。但是我正在删除 load 属性然后它没有给我任何结果。我能够检查提到的表的所有列是否都已编入索引(“xxx:9200/jobs/_mapping?pretty=1”)。

请建议我如何实现它。

谢谢。

4

2 回答 2

0

load: true将为每个返回的结果调用您的数据库。没有它,您的结果就是这些Item对象,它们就像您的模型实例一样。

您需要做的是确保为模型设置了映射集,然后确保导入索引。

class User
    include Mongoid::Document
    field :name, type: String
    mapping do
        indexes :name
    end
 end

然后,在您的模型设置好您将运行的索引之后, rake tire:import CLASS=User 这将索引您的用户类。在你会做之后

search = Tire.search(User.index_name) do
    query { string 'billy' }
end
puts search.results.first.name

这里有很多好的文档https://github.com/karmi/tire

于 2013-05-31T17:28:03.487 回答
0
load: true

将参考数据库进行关联。您可以在映射中添加关联以将其保存在 elasticsearch 中。

于 2013-11-22T21:53:37.913 回答