6

मैं डेटास्टोर क्वेरी करने के लिए कोशिश कर रहा हूँ की तुलना में कम है, और मेरी क्वेरी के साथ त्रुटि इस तरह दिखता है:जीक्यूएल क्वेरी, Google डेटास्टोर के साथ मुद्दे। कई की स्थिति और अधिक से अधिक और ऑपरेटरों

SELECT * 
FROM mydb 
WHERE Latitude = "18.1" AND Number > "1" 

हालांकि यह काम नहीं करता।

SELECT * 
FROM mydb 
WHERE Number > "1" AND Number < "5" 

मैं केवल तक पहुँचने हूँ: इस काम की तरह

no matching index found. recommended index is:\n- kind: mydb\n properties:\n - name: Location\n - name: Number\n

सरल अनुरोध: जब मैं अपने कोड चलाने

GQL query error: Your Datastore does not have the composite index (developer-supplied) required for this query.

और इस त्रुटि: मैं डेटास्टोर क्वेरी बॉक्स में इस त्रुटि मिलती है शायद यहां एक स्तंभ भी यही कारण है?

SELECT * 
FROM mydb 
WHERE Latitude = "18.1" AND Number = "1" 

यह काम किया:

नहीं,

तो मैं इस तरह के अनुरोध की कोशिश की।

मैं एक समाधान को देखने की कोशिश की, और मैं यह पृष्ठ भर में आया था: https://cloud.google.com/datastore/docs/tools/indexconfig#Datastore_About_index_yaml

कि पेज के माध्यम से जाने के बाद, मैं इकट्ठा कि मैं एक index.yaml फ़ाइल कहीं की जरूरत है। इसे वेब-आईएनएफ नामक फ़ोल्डर में जाना है। लेकिन मेरे पास यह फ़ोल्डर नहीं है।

यह मेरा कोड का एक छोटा टुकड़ा है:

Query<Entity> query = Query 
       .gqlQueryBuilder(Query.ResultType.ENTITY, 
         "SELECT * FROM " + kind + " WHERE Location = @location AND Number <= @number") 
       .setBinding("number", "5").setBinding("location", "18.1").build(); 
QueryResults<Entity> results = datastore.run(query); 
+0

आपकी 'appengine-web.xml' कहां स्थित है? – Nicholas

+0

@ निकोलस मेरे पास कहीं भी नहीं है, मेरा प्रोग्राम इसके बिना तैनात और चला सकता है। –

+0

क्या आप अपने आवेदन की पूरी निर्देशिका संरचना पोस्ट कर सकते हैं? – Nicholas

उत्तर

2

त्रुटि आप प्राप्त है, क्योंकि क्वेरी आप प्रयास कर रहे हैं Composite indexes जो डिफ़ॉल्ट रूप से उपलब्ध नहीं हैं की आवश्यकता है। उन्हें index.yaml के भीतर निर्दिष्ट किया जाना चाहिए।

आलेख Creating index files जो पोस्ट किए गए से कुछ अलग है, विशेष रूप से लचीले वातावरण में चल रहे जावा अनुप्रयोगों के लिए है।

वहाँ एक index.yaml बनाने के लिए 2 तरीके हैं:

  1. मैन्युअल अपने पसंदीदा पाठ नियमों का पालन और Index definitions में निर्धारित संपादक संरचना का उपयोग।
  2. फ़ाइल को जेनरेट करते समय स्थानीय रूप से परीक्षण करें। यह gcloud beta emulators datastore start कमांड का उपयोग करके किया जा सकता है। आप --data-dir <dir> विकल्प का उपयोग यह निर्दिष्ट करने के लिए भी कर सकते हैं कि उत्पन्न index.yaml लिखा जाना चाहिए।

फिर, जब आप index.yaml है और app.yaml रूप में एक ही निर्देशिका, आप इसे gcloud preview app deploy index.yaml कि निर्देशिका से साथ तैनात कर सकते हैं। इस प्रक्रिया को संक्षिप्त रूप से Deploying the index file में प्रलेखित किया गया है।

मैं Organizing yaml Configuration Files पढ़ने की भी सिफारिश करता हूं।

+0

धन्यवाद, मैं आगे बढ़ूंगा और कोशिश करूँगा, हालांकि दो जगहें हैं जिनमें app.yaml फ़ाइलें हैं, एक src/main/appengine में है और दूसरा लक्ष्य/एपेंगिन-स्टेजिंग में है। मैं किस निर्देशिका में index.yaml डाल देना चाहिए? –

+0

'src/main/appengine' जैसा कि मुझे लगता है कि आप कहां चल रहे हैं 'gcloud पूर्वावलोकन ऐप तैनाती' – Nicholas

+0

धन्यवाद, मैं इसे एक शॉट दूंगा और आपको यह बता दूंगा कि यह कैसा चल रहा है। –

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