に2つのキーを持つことができ、私はこのようになり、ネストされたドキュメントのインデックスがあるとします。私は今selectorCodeを返します「つまり、lineItems」文書のカウント集計を取得したいは集約がelasticsearch
{
"mappings": {
"assignment": {
"properties":{
"id": {
"type": "string"
},
"location": {
"type": "string"
},
"typeOfLoss":{
"type": "string"
},
"lineItems": {
"type": "nested",
"properties": {
"categoryCode":{
"type": "string"
},
"selectorCode":{
"type": "string"
},
"roomType": {
"type": "string"
}
}
}
をし、 categoryTypeここで、roomTypeは検索クエリに一致します。私はelasticsearchに新しいですし、SQL
SELECT COUNT(*) as theCount, ln.category_code, ln.selector_code
FROM line_items as ln, assignment
WHERE assignment.location = "84043"
AND assignment.typeOfLoss = "Fire"
AND ln.roomType = "kitchen"
GROUP BY ln.category_code, ln.selector_code
ORDER BY theCount DESC;
私はNESTクエリに開始しているが、いくつかの問題を抱えていますで私のクエリを書くことができ、誰かが右方向に私を指すことができます期待しています。
var typeOfLossQuery = new TermQuery
{
Field = "typeOfLoss",
Value = typeOfLoss
};
var locationQuery = new TermQuery
{
Field = "location",
Value = location
};
var roomTypeQuery = new TermQuery
{
Field = "roomType",
Value = roomType
};
var result = client.Search<LineItem>(s => s
.From(0)
.Size(numberOfItems)
.Query(q => q.HasParent<Assignment>(a => a
.Query(x =>x
.MatchAll() && typeOfLossQuery && locationQuery
)
) && q.MatchAll() && roomTypeQuery
));
すべての努力をいただきありがとうございます!私はこれがあなたが2つのキーを持つことはできませんが、私の問題を解決しないという私の質問に答えると思います。 CategoryCodes:C1とC2の2つがあり、C1の中にSelectorCode:S1、S1、S2とS3がある場合、C2にはSelectorCodes:S1、S1、S1があります。 CategoryCodeとSelectorCodeのペアが最も多く発生するため、C2、S1を最初のアイテムとして取得したいと思いますが、例ではC1、S1、C1、S2、C1、S3を取得します。 。 –
私はあなたが言っていることを聞いています。すべてのデータはそこにありますが、あなたが望むようにそれを手配するには少しの作業が必要です。あなたは単に「注文(1)DESCで注文する」ことはできません – jhilden