2012-11-21 25 views
1

我有一個基於Elasticsearch和輪胎的全文搜索的Rails應用程序,它已經在一個叫做Category的MongoDB模型上工作,但現在我想添加更多複雜的搜索基於MongoID Embedded 1-n模型用戶這embeds_many:監視列表Elasticsearch與輪胎在軌道大容量導入和索引問題

現在我已經在監視列表中批量導入和索引的所有領域,我想知道:

  1. 我該怎麼做呢?
  2. 可以索引監視列表兒童字段,沒有用戶父母字段?

嵌入式1-N的MongoDB/MongoID模型看起來如下:

應用/模型/ user.rb(父):

class User 
    include Mongoid::Document 

    include Tire::Model::Search 
    include Tire::Model::Callbacks 
    index_name 'users' 

    field :nickname 
    field ... many others 

    embeds_many :watchlists 
end 

應用/模型/ watchlist.rb (嵌入「許多」兒童):

class Watchlist 
    include Mongoid::Document 

    include Tire::Model::Search 
    include Tire::Model::Callbacks 
    index_name 'watchlists' 

    field :html_url 
    embedded_in :user 
end 

任何關於如何完成任務的建議?

UPDATE: 這裏是模型的一大塊見過蒙戈外殼

> user = db.users.findOne({'nickname': 'lgs'}) 
    { 
     "_id" : ObjectId("4f76a16cf2a6a12f88cbca43"), 
     "encrypted_password" : "", 
     "sign_in_count" : 0, 
     "provider" : "github", 
     "uid" : "1573", 
     "name" : "Luca G. Soave", 
     "email" : "[email protected]", 
     "nickname" : "lgs", 
     "watchlists" : [ 
      { 
       "_id" : ObjectId("4f76997f1d41c81173000002"), 
       "tags_array" : [ git, peristence ], 
       "html_url" : "https://github.com/mojombo/grit", 
       "description" : "Grit gives you object oriented read/write access to Git repositories via Ruby.", 
       "fork_" : false, 
       "forks" : 207, 
       "watchers" : 1258, 
       "created_at" : ISODate("2007-10-29T14:37:16Z"), 
       "pushed_at" : ISODate("2012-01-27T01:05:45Z"), 
       "avatar_url" : "https://secure.gravatar.com/avatar/25c7c18223fb42a4c6ae1c8db6f50f9b?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png" 
      }, 
     ... 
     ... 
    } 

我想指數&查詢由嵌入式孩子擁有的任何領域的觀察列表的文檔:

... "tags_array", "html_url", "description", "forks" 

但我不希望elasticsearch包含父級用戶字段:

... "uid", "name", "email", "nickname" 

這樣當我查詢「git persistence」時,它會查看原始MongoDB的每個'user'的每個'watchlist'索引字段。

(對不起,不匹配單數和複數在這裏,我只是表示doc對象名稱)

+0

你好,有什麼消息嗎? – karmi

+0

@karmi一切都好,謝謝,...我只是忘了更新和標誌。本質上它只是索引嵌入的文檔的子部分,它是... RAILS_ENV =生產耙環境輪胎:導入CLASS =監視列表FORCE = true –

+0

很高興知道,酷! – karmi

回答

3

這真的取決於你想如何序列數據的搜索引擎,根據您要如何對它們進行查詢。請更新問題,我會更新答案。 (另外,最好刪除ES日誌,它們在這裏並不相關。)

我不確定Rake任務如何在Mongo中與嵌入式文檔一起工作,以及爲什麼它似乎「掛起」在結束。運行任務時,數據是否位於「用戶」索引中?

請注意,當Rake任務不夠靈活時,提供自己的索引代碼非常容易。請參閱Tire::Index#import集成測試。