2013-05-30 95 views
1

我正在使用Tire來實現Elasticsearch。我的環境是Linux,Rails 3.2和Ruby 1.9.3。 我能夠在寶石輪胎(0.5.8)的幫助下使用Elasticsearch進行索引。 但現在爲了提高性能,我想從索引數據中獲取數據,而不是命中數據庫(我只想使用db作爲INSERT和UPDATE)。如何使用Tire從Elasticsearch索引獲取數據而不碰數據庫

要做到這一點,我使用下面的代碼:

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 

由於我使用負載:真擊中數據庫(MySQL的)我不want.But我正在移除負載屬性,那麼它給了我沒有結果。 我能夠檢查提到的表的所有列被索引(「xxx:9200/jobs/_mapping?pretty = 1」)。

請建議我如何實現它。

謝謝。

+0

只是** result.inspect **返回什麼? – concept47

+0

Thanks @ concept47 for response.Now我能夠取代ActiveRecord的彈性模型。返回的result.inspect如下所述:# false,:page => 1,:per_page => 20},@path = \「/ jobs/_search \」,@query =# {:query => \「is_active:1 \」}}>,@filters = [{:range => {:status => {:gte => 0}}}],@sort = {:created_at => \「desc \」} ]現在,怎樣才能實現關聯來取代預先加載的代碼。 – Animesh

回答

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

+0

感謝你們所有人。我得到了它的工作。 – Animesh

0
load: true 

將把數據庫關聯。您可以在映射中添加關聯以將其保存在elasticsearch中。

相關問題