यह एक अच्छी शुरुआत है!
मैं निश्चित रूप से इसे समतल कर दूंगा (यानी denormalizeए> ) और नीचे दिए गए जैसे दिखने वाले उत्पाद दस्तावेज़ों के साथ आएं। इस तरह आप केवल flags बनाकर उत्पादों और झंडों के बीच N:M संबंध से छुटकारा पा सकते हैं प्रत्येक उत्पाद के लिए सरणी। इस प्रकार उन झंडों को क्वेरी करना आसान हो जाएगा।
{
"id": "00c8234d71c4e94f725cd432ebc04",
"title": "Alpha",
"price": 589.0,
"flags": ["Sellout", "Top Product"]
}
{
"id": "018357657529fef056cf396626812",
"title": "Beta",
"price": 355.0,
"flags": ["Discount"]
}
{
"id": "01a2c32ceeff0fc6b7dd4fc4302ab",
"title": "Gamma",
"price": 0.0,
"flags": ["Discount"]
}
उत्पाद मानचित्रण प्रकार इस तरह दिखेगा:
PUT products
{
"mappings": {
"product": {
"properties": {
"id": {
"type": "string",
"index": "not_analyzed"
},
"title": {
"type": "string"
},
"price": {
"type": "double",
"null_value": 0.0
},
"flags": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
चूंकि आपके पास लॉगस्टैश है jdbc इनपुट पहले से ही, आप केवल उत्पादों और संबंधित झंडे लाने के लिए उचित SQL क्वेरी खो रहे हैं।
SELECT p.Id as id, p.Title as title, p.Price as price, GROUP_CONCAT(f.Title) as flags
FROM Products p
JOIN flagsProducts fp ON fp.ProductId = p.Id
JOIN Flags f ON fp.FlagId = f.id
GROUP BY p.Id
जिससे आपको इस तरह की पंक्तियाँ मिलेंगी:
+-------------------------------+-------+-------+---------------------+
| id | title | price | flags |
+-------------------------------+-------+-------+---------------------+
| 00c8234d71c4e94f725cd432ebc04 | Alpha | 589 | Sellout,Top product |
| 018357657529fef056cf396626812 | Beta | 355 | Discount |
| 01a2c32ceeff0fc6b7dd4fc4302ab | Gamma | 0 | Discount |
+-------------------------------+-------+-------+---------------------+
लॉगस्टैश फ़िल्टर का उपयोग करके आप flags . को विभाजित कर सकते हैं एक सरणी में और आप जाने के लिए अच्छे हैं।