2010-06-11 14 views
13

मुझे पता है कि एप्लिकेशन इंजन के प्रतिबंध के रूप में यहाँ वर्णित है "असमानता फिल्टर एक संपत्ति पर केवल अनुमति दी जाती है" कर रहा हूँ: http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html#Introducing_Indexesकैसे प्रभावी ढंग से एप्लिकेशन इंजन में प्रश्नों पर दो असमानता फिल्टर को चलाने के लिए

लेकिन वहाँ कोई रास्ता है अनिवार्य रूप से दो फिल्टर चलाने के लिए, या यह बस संभव नहीं है? उदाहरण के लिए, अगर मेरे पास एक इकाई प्रकार था जिसमें बस एक्स और वाई समन्वय था, और मैं उन सभी इकाइयों को चाहता था जो एक्स 1 से एक्स 2 और वाई 1 से वाई 2 की एक निश्चित सीमा के भीतर हैं, क्या एक्स 1 से सभी इकाइयों के लिए पूछताछ करने का कोई तरीका है एक्स 2 उनके वाई मानों द्वारा क्रमबद्ध है और फिर वाई मानों के लिए मेरी वांछित सीमा के बीच प्रासंगिक लोगों को आसानी से पकड़ लेते हैं?

यदि हां, तो क्या किसी के पास प्रदर्शन करने के लिए कुछ उदाहरण कोड है?

उत्तर

6

यदि यह आपके डेटा के अनुरूप है, तो आप अपने एक्स और वाई को डिब्बे में विघटित कर सकते हैं, दो मानों का हैश उत्पन्न कर सकते हैं और मॉडल पर स्टोर कर सकते हैं। फिर आप हैश (एसएस) के लिए सटीक लुकअप कर सकते हैं जो उस क्षेत्र को ओवरलैप कर सकते हैं जिसमें आप खोजना चाहते हैं। फिर, अपने क्षेत्र के बाहर के परिणामों को मैन्युअल रूप से फ़िल्टर करें।

यह अनिवार्य रूप से geomodel अक्षांश/देशांतर के लिए कर रहा है।

+0

क्या इस मॉडल के लिए कोई कामकाजी नमूना है? जैसे मुझे उम्र> 26 और ऊंचाई> 113 के परिणाम प्राप्त करने की आवश्यकता है। मैं इसे कैसे मैप/क्वेरी करूं? – nanospeck

+0

साथ ही उम्र आप प्रत्येक उपयोगकर्ता के लिए 0, 10, 20, 30, 40 इत्यादि के लिए 'दशक' स्टोर कर सकते हैं। फिर एक क्वेरी करें जहां ऊंचाई> 113 और उम्र [20, 30, 40, (और इतनी है) 100 कहने के लिए)]। फिर एक बार परिणाम मिलने के बाद, उन लोगों को मैन्युअल रूप से फ़िल्टर करें जो 26 से कम हैं। –

3

अल्फ्रेड फुलर के हालिया Google I/O talk के अनुसार, वे संख्यात्मक गुणों पर एकाधिक असमानता फ़िल्टर के लिए समर्थन पर काम कर रहे हैं।

+2

किसी को भी पता है कि यह अभी तक हुआ है या नहीं? – clifgray

+1

केवल ऑब्जेक्ट क्वेरी में। इस तरह: कुछ मॉडेल.ल() फ़िल्टर ('ए>', बी)। फ़िल्टर ('ए 2>', बी 2) –

1

आप जो करने का प्रयास कर रहे हैं उसके आधार पर, आपको यह MultiInequalityMixin दिलचस्प लगता है। यह आपके द्वारा वर्णित बहुत कुछ करता है, Google की डेटाबेस के माध्यम से पहली असमानता को पारित करता है और फ़िल्टर के रूप में बाद में असमानताओं को करता है। अस्वीकरण: यह एक साल पहले एक विचार के एक सुंदर स्केची कार्यान्वयन है और वास्तव में हर कोई समाप्त नहीं हुआ है ...

यदि आपको दो अक्षों पर कुशल अनुक्रमण की आवश्यकता है, तो सैक्सन ड्रूस कहते हैं, किसी प्रकार का भूहाश आदि एल्गोरिदम के लिए क्या कहा जाता है।

संबंधित मुद्दे