2014-10-27 11 views
5

मेरे पास एक अमेज़ॅन क्लाउडसेर्च डोमेन है। यदि फ़ील्ड 'भाषा' मौजूद है तो इसका लक्ष्य फ़िल्टर करना है। सभी ऑब्जेक्ट्स में कोई भाषा नहीं है, और मैं उन लोगों को रखना चाहता हूं जिनके पास भाषा फ़िल्टर है, लेकिन जिनके पास कोई भाषा नहीं है, उन्हें वापस भी किया जाना चाहिए।अमेज़ॅन क्लाउडसेर्च: यदि मौजूद है तो फ़िल्टर

मैं साथ फ़िल्टर करना चाहते हैं (या भाषा: 'en' भाषा: नल)

हालांकि अशक्त एक स्ट्रिंग के भीतर पारित नहीं किया जा सकता है।

क्या यह संभव है? यदि ऐसा है तो यह कैसे किया जाएगा।

उत्तर

4

मैं कहीं और अच्छी तरह से देखा, ऐसा लगता है:

सरल है, क्षेत्र के लिए एक डिफ़ॉल्ट मान सेट, और फिर अपने अशक्त के लिए उस मान का उपयोग करने के लिए जिस तरह से।

उदाहरण के लिए, स्ट्रिंग को "शून्य" स्ट्रिंग पर सेट करें, फिर आप आसानी से इसका परीक्षण कर सकते हैं।

मुझे विश्वास है कि आप एक डिफ़ॉल्ट मान जोड़ सकते हैं, और फिर से अनुक्रमित कर सकते हैं, और इसे डिफ़ॉल्ट रूप से फिर से लागू करना चाहिए।

+0

क्यों downvote? – user1628284

2

कोई रास्ता सफाई से वास्तव में आप क्या चाहते हैं करने के लिए नहीं है, लेकिन यहाँ दो विकल्प हैं:

  1. सूचकांक एक नए क्षेत्र has_language जैसा कुछ कहा दस्तावेज़ प्रस्तुत समय में language!=null लिए अपने मूल्य निर्धारित करते समय,।
  2. यह एक हैक का अधिक है क्योंकि सीमा केवल पूर्णांक के साथ उपयोग की जानी चाहिए, लेकिन मैंने इसे शाब्दिक क्षेत्रों (range field=language [0,}) पर सफलतापूर्वक उपयोग किया है।
3

आप Lucene क्वेरी पार्सर उपयोग करने के लिए तैयार हैं, तो आप इस तरह आपकी क्वेरी को व्यक्त कर सकते हैं:

(*:* OR -language:*) OR language:en

नोट: फैशनेबल (*:* OR ...) निर्माण क्योंकि जिस तरह से व्यवहार करता है Lucene नकार दिया या खंड के लिए आवश्यक है।

सामान्य तौर पर, आप अस्तित्व/Lucene क्वेरी पार्सर के साथ एक क्षेत्र का अस्तित्व में न के आधार पर फ़िल्टर कर सकते हैं:

सभी दस्तावेज युक्त field: field:[* TO *]

सभी दस्तावेजों field युक्त नहीं: -field:[* TO *]

नोट: यदि field टेक्स्टुअल (टेक्स्ट या शाब्दिक डेटाटाइप) है तो आपको रेंज क्वेरीज़ की आवश्यकता नहीं है और आप उपर्युक्त को निम्न को कम कर सकते हैं:

field:* और -field:*

+0

यह इस प्रश्न के लिए स्वीकार्य उत्तर होना चाहिए। –

1

आप अपने क्षेत्र प्रकार के आधार पर prefix या range ऑपरेटरों का उपयोग करके अस्तित्व के लिए खोज सकते हैं। प्रकार एक शब्द है या तो एक स्ट्रिंग तो तुम इतनी तरह उपसर्ग का उपयोग कर सकते हैं:

(prefix field=example '') 

यह केवल परिणाम है कि क्षेत्र example के लिए अशक्त नहीं हैं निकलेगा।

तिथियों के लिए आप एक समावेशी समय अवधि का उपयोग कर सकते हैं:

(range field=updated ['0000-01-01T00:00:00.000Z',}) 

यह भी समय के बाद एक updated तारीख के साथ आइटम शामिल केवल जाएगा, एक अशक्त अद्यतन की तारीख के साथ आइटम शामिल नहीं किया जाएगा। आप अन्य फ़ील्ड प्रकारों के लिए अन्य समान खोज कर सकते हैं।

इसी प्रकार आप not ऑपरेटर का उपयोग नल फ़ील्ड वाले आइटमों का सेट प्राप्त करने के लिए कर सकते हैं।

उदाहरण के लिए, एक अशक्त example क्षेत्र के साथ सभी आइटम:

(not (prefix field=example '')) 
संबंधित मुद्दे