ElasticsearchとTireに基づく全文検索を備えたRailsアプリがあり、CategoryというMongoDBモデルですでに動作していますが、今度は、 embeds_manyであるMongoID Embedded 1-nmodelUserに基づくより複雑な検索を追加したいと思います。 :ウォッチリスト
ここで、ウォッチリストのすべてのフィールドを一括インポートしてインデックスを作成する必要があります。知りたいのは次のとおりです。
- どうやってやるの ?
- ユーザーの親フィールドなしで、ウォッチリストの子フィールドのみにインデックスを付けることができますか?
Embedded 1-N MongoDB / MongoIDモデルは、次のようになります。
app / models / 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
app / models / 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
タスクを達成する方法について何か提案はありますか?
更新: ここでは、mongoシェルで見られるモデルのチャンクです
> user = db.users.findOne({'nickname': 'lgs'})
{
"_id" : ObjectId("4f76a16cf2a6a12f88cbca43"),
"encrypted_password" : "",
"sign_in_count" : 0,
"provider" : "github",
"uid" : "1573",
"name" : "Luca G. Soave",
"email" : "luca.soave@gmail.com",
"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の各「ユーザー」の各「ウォッチリスト」インデックス付きフィールドが調べられます。
(ここでは単数形と複数形が一致していないことをお詫びします。ドキュメントオブジェクト名を示しているだけです)