背景:
私はmongo-elasticsearch川を介してElasticSearchと連携してMongoDBを使用しています。Elasticsearch では、ドキュメントの構造を次のようにしたいと考えています。
{
"_id": "SomeId-AnotherId",
... // all the other lovely denormalized data
}
SomeId-AnotherId は、データを非正規化するときに作成するものです。この構造が必要な理由はhttp://elasticsearch/index/type/SomeId-AnotherId
、ドキュメントを取得するために言うことができる必要があるからです。
データ (C# アプリ) を非正規化してから、MongoDB に挿入します (このデータは、前述のように、川を介して ES に入ります)。MongoDB に挿入するとき、現在、Mongo がドキュメントのインデックス作成に使用するモデルに BsonId を設定する必要があるという印象を受けています。[BsonId] 属性を追加する限り、これは ObjectId または string や int などの他の型にすることができます。
私のモデルは次のようになります。
public class Model {
[BsonId]
public string Id {get;set;}
}
そして、私はそれを次のように設定しました:
model.Id = string.format("{0}-{1}", someId, anotherId);
問題
現時点では、10,000 までの挿入から 1,500 までのドキュメントが Mongo に取り込まれています。モデル オブジェクト用に生成していた ID を確認したところ、12 バイトをはるかに超えていました。モンゴはそれらを拒否し、書かないでしょうか?
Bson Id は 12 バイトです。これは、独自の ID ("SomeId-AnotherId" の形式) を作成する場合、長さも 12 バイトにする必要があるということですか? とにかくこのあたり?
上記のように、ドキュメントがelasticsearchに入ったら、特定の方法でドキュメントを取得できるようにしたいので、これらのドキュメントにmongosのデフォルトobjectIdを使用したくありません(URIで「SomeId-AnotherId」を使用)。
最終的な注意:
ElasticId などと呼ばれる別の ID プロパティをモデルに追加し、Elasticsearch を構成してこのプロパティを探し、elasticsearch ドキュメントの _id として使用できることを認識しています。これを行うと、Mongos のデフォルト ID を使用でき、すべてがうまくいきます。ただし、elasticsearch のパフォーマンスを犠牲にし、必要のない追加のフィールドをエラスティック検索に格納する必要があります。
大規模なブレイン ダンプで申し訳ありません。:)