2013-10-23 12 views
6

文書を弾性検索に索引付けするときにIDを自動的に生成します。これは、私のポコにIdプロパティを指定しないと正常に動作します。自動ID生成とマッピング_id NEST

インデックス作成時に自動生成されたIDを取得して使用するときは、基礎となる_idフィールドをpocoクラスにマップします。 idを指定するかどうかを指定することができます。私が紛失しているそれらの巣apiのオプションはありますか? https://gist.github.com/antonydenyer/9074159

+0

、elasticsearchは自動的にIDを作成します。ここでの例は、(代わりにPUTの使用POSTに注意してください)です。 – uzay95

答えて

-1

要旨

EDIT

例は、NESTの自動クラスで "ID" フィールドを検出し、ESで "_id" にマップように見えます。あなたの要件は奇妙に見えますが、なぜ2つのクラスを作成しないのですか?インデックス作成用(Idフィールドなし)、取得用(インデックス作成クラスから継承され、新しいフィールド "Id"宣言用) @ Duc.Duongとして

例えば:

public class DataForIndex 
{ 
    public string Name { get; set; } 
    // some other fields... 
} 

public class DataForGet : DataForIndex 
{ 
    public int Id { get; set; } 
} 
+0

応答のおかげで、残念ながらこれは動作しません。現時点では、私は他の方法でクラスを豊かにしています。非常にエレガントではなく、もっと良い方法があるのか​​どうか疑問に思っています。 –

+0

@antonydenyer Duc.Duongの回答がうまくいかない理由で質問を更新できますか?これはこの問題に取り組む最良の方法ですが、ネストが使用するクラスのインデックスとタイプ名を推測しようとすることも考慮する必要があります。あなたは、クラスがどのようにConnectionSettingsのインデックス/タイプ名にマップするかを指定することによって、それらを修正することができます。 –

+0

@MartijnLaarman私は、私が意味することの例をまとめて、私がそうするときにここに要点を掲示するために時間を費やしています。 Duc-duongの提案は理にかなっていますが、残念ながら私のためには私のためにすぐに使えませんでした。私はクラスを飾ってタイプを指定するのを覚えているようですが、私は確信が持てません。それだけでもいいかもしれない。 –

2

あなたがDocumentWithMetaでIDにアクセスすることができ、コメントで述べています。 NEST DocumentsWithMetaDataの現在のバージョンでは、Hitsに置き換えられ、IHit<DataForGet>.Idstringからintにキャストする必要があります。

これは私のコードである:

public class DataForIndex 
{ 
    public string Name { get; set; } 
    // some other fields... 
} 

public class DataForGet : DataForIndex 
{ 
    public int Id { get; set; } 
} 

var result = client.Search<DataForGet>(x => x.Index("index").MatchAll()); 
var list = results.Hits.Select(h => 
            { 
             h.Source.Id = Convert.ToInt32(h.Id); 
             return h.Source; 
            }).ToList(); 
2

Automatic ID Generation

インデックス操作は、IDを指定せずに実行することができます。このような場合、idは自動的に生成されます。さらに、op_typeは自動的にcreateに設定されます。

$ curl -XPOST 'http://localhost:9200/twitter/tweet/' -d '{ 
    "user" : "kimchy", 
    "post_date" : "2009-11-15T14:12:12", 
    "message" : "trying out Elasticsearch" 
}' 

結果:

あなたの代わりにPUTのPOSTを使用してHTTP要求を行った場合
{ 
    "_index" : "twitter", 
    "_type" : "tweet", 
    "_id" : "6a8ca01c-7896-48e9-81cc-9f70661fcb32", 
    "_version" : 1, 
    "created" : true 
} 
+0

はい、PUTの代わりにPOSTが使用されていることに注意してください –

関連する問題