2016-10-08 1 views
1

私はxamarin.formsでクロスプラットフォームのアプリケーションを開発しています。私はElasticSearchにオブジェクトのリストを直接格納する方法を探しています私は後でリストのオブジェクトに基づいて結果を検索することができます。私のシナリオはfolloringです:どのようにac#を保存するにはNEST 2.xを使用したElasticSearchへのオブジェクトリスト

public class Box { 

    [String(Index = FieldIndexOption.NotAnalyzed)] 
    public string id { get; set; } 

    public List<Category> categories { get; set; } 
} 


public class Category { 

    [String(Index = FieldIndexOption.NotAnalyzed)] 
    public string id { get; set; } 

    public string name { get; set; } 
} 

私の目的は、特定のカテゴリを持つすべてのボックスを検索できるようにすることです。

the documentationのようにすべてを正しくマップしようとしましたが、それを好きならば、ボックスを保存すると、最初のカテゴリのみが格納されます。

実際にそれを行う方法はありますか、それともNESTではできませんか?

どのようなヒントも大歓迎です!

おかげ

答えて

1

それだけではドキュメント内のコードを使用して自動マップで正常に動作する必要があります:

インデックスが存在しない場合:

var descriptor = new CreateIndexDescriptor("indexyouwant") .Mappings(ms => ms .Map<Box>(m => m.AutoMap()) );

をしてからのようなものを呼び出します:

await client.CreateIndexAsync(descriptor).ConfigureAwait(false);

や、非同期使用していない:インデックスが既に上CreateIndexDescriptorパーツを作成することを忘れるとだけ呼んその後

が存在する場合

client.CreateIndex(descriptor);

を:

await client.MapAsync<Box>(m => m.Index("existingindexname").AutoMap()).ConfigureAwait(false);

、または非同期使用しない場合:

client.Map<Box>(m => m.Index("existingindexname").AutoMap());

あなたが正常タイプのマッピングを作成したら、インデックス文書をすることができます。

最初にボックスに1つのカテゴリしかなく、それをインデックスにマッピングすることは可能ですか(リストを作成する前に)?そのため、Senseなどのマッピングを手動で編集する必要があります。

インデックスに重要なデータがあるかどうかはわかりませんが、インデックス全体を削除することもできます(マッピングも削除されます)。もう一度やり直してください。しかし、あなたはすでにインデックスで既に索引付けしたすべての文書を失います。

+0

私はインデックスを削除し、ドキュメントに記載されているようにすべてを行いましたが、リストを保存しようとしたときにリストの最初のオブジェクトのみが保存されました – svicente3

+0

現時点でのマッピングの様子ボックスのインデックスを作成しますか? – ss1991

+0

マッピングを使用してインデックスを作成した後、次のコードでドキュメントをインデックスできるようにする必要があります: 'client.Index (refToObj、i => i.Index(" index ")。Id( "id")); '(たとえば) – ss1991

関連する問題