मेरे फ़िल्टर श्रेणियों में एक साथ समूहित हैं। मैं उन दस्तावेज़ों को पुनर्प्राप्त करना चाहता हूं जहां कोई दस्तावेज़ किसी श्रेणी में किसी भी फ़िल्टर से मेल खाता है, लेकिन यदि दो (या अधिक) श्रेणियां सेट की गई हैं, तो दस्तावेज़ को सभी श्रेणियों में से किसी भी फ़िल्टर से मेल खाना चाहिए।लोचदार खोज में नेस्टेड और और फ़िल्टर कैसे करें?
तो छद्म एसक्यूएल में लिखा यह होगा:
SELECT * FROM Documents WHERE (CategoryA = 'A') AND (CategoryB = 'B' OR CategoryB = 'C')
मैं बहुत तरह नेस्ट फिल्टर की कोशिश की है:
{
"sort": [{
"orderDate": "desc"
}],
"size": 25,
"query": {
"match_all": {}
},
"filter": {
"and": [{
"nested": {
"path":"hits._source",
"filter": {
"or": [{
"term": {
"progress": "incomplete"
}
}, {
"term": {
"progress": "completed"
}
}]
}
}
}, {
"nested": {
"path":"hits._source",
"filter": {
"or": [{
"term": {
"paid": "yes"
}
}, {
"term": {
"paid": "no"
}
}]
}
}
}]
}
}
लेकिन जाहिर है मैं काफी ES वाक्य रचना समझ में नहीं आता। क्या यह सही रास्ते पर है या क्या मुझे एक और फ़िल्टर का उपयोग करने की आवश्यकता है?
जवाब पर छानने से संबंधित प्रश्न के लिए: 'टर्म' के साथ '' '' '' '' '' '' '' '' के साथ आसान किया जा सकता है (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms- filter.html)। और [बूल] के लिए डिफ़ॉल्ट (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html) '' और '' है। 'filter.bool.must के साथ कुछ: [{शर्तें: प्रगति: [" अपूर्ण "," पूर्ण "]}। {शर्तें: भुगतान: ["हाँ", "नहीं"]}] '' काम कर सकता है? – cfrick
नेस्टेड प्रश्न/फ़िल्टर का उपयोग सरणी/सूचियों के लिए किया जाता है (निर्भर करता है कि आप किस भाषा से परिचित हैं उदा। 'ए = [{' बी ': 1}, {' c ': 2}])। क्या आप अपने दस्तावेज़ों में से एक का उदाहरण लिख सकते हैं? इससे – Diolor
सीएफरिक ने मुझे सही रास्ते में ले जाया है। मैंने 'और' फ़िल्टर के अंदर 'नियम' फ़िल्टर का एक गुच्छा घोंसला, और यह मेरी आवश्यकताओं को पूरा करता प्रतीत होता है। – MHTri