2
私はElasticSearchデータベースを持っており、Books
とTags
のドキュメントを持っています。ブックには複数のタグがあります。書籍のすべてのタグを取得するためのElasticSeachクエリ
ブックのためのC#クラス:
[ElasticsearchType(Name = "Book")]
public class Book
{
[Keyword(Store = false)]
public string Id{ get; set; }
[Keyword(Store = false)]
public string CoverColor{ get; set; }
public List<Tag> tags { get; set; }
}
そして、これはタグのElasticSearchドキュメントです:
[ElasticsearchType(Name = "Tag")]
public class Tag
{
[Keyword(Store = false)]
public int Id{ get; set; }
[Keyword(Store = false)]
public string Name{ get; set; }
}
これは、ブックドキュメントの1つのJSONバージョンです:
{
"_index": "myindex",
"_type": "Book",
"_id": "4d43345fffereredwerw324",
"_score": 1,
"_source": {
"id": "123456",
"coverColor": "Red",
"tags": [
{
"id": 15,
"name": "fantasy"
},
{
"id": 2,
"name": "Science fiction"
}
]
}
}
私が持っていたいのは、繰り返しを使わずにすべての本の色を検索するクエリです(私は2つのレッドと4つのグリーンを持っているとしましょう、私は1レッドと1グリーンを取得する必要があります)、各色について、関連するタグのリストを取得する必要があります。同じ色の下にあるすべてのタグ、基本的には)
理想的なJSON出力:
result = [
{
coverColor: "Red",
tags: [{ id:1, name:"Fantasy"}, {id: 4, name:"Science fiction"}, {id:33, name:"Novel"}]
},
{
coverColor: "Green",
tags: [{id: 4, name:"Science fiction"}]
},
{
coverColor: "White",
tags: []
}
:
要求は次のようになります!あなたが私にそれをテストし、必要な場合はそれを微調整することができますので、キバナバージョンの質問を教えてください。多くのありがとう:-) –
編集された答えで...私は答えた後にタグ集計を質問に追加しました。それは少し複雑です。あなたは 'ネストされた集約'とおそらく '逆ネストされた集約'を読み上げる必要があります。しかし、これはあなたを開始する必要があります。 – tigerswithguitars
@GianlucaGhettiniでは、 'ConnectionSettings'で' .OnRequestCompleted() 'と' .DisableDirectStreaming() 'を使ってシリアライズされたクエリjsonを得ることができます:https://www.elastic.co/guide/en/elasticsearch/client/net- IElasticClient.Serializerの '.SerializeToString()'を使用して、検索要求/記述子を渡します。 –