2016-07-24 5 views
0

Ich habe ein Index-Setup für ein Feld "Benutzer-ID". Wenn ich versuche, mit einem $ und $ abzufragen, bekomme ich eine schlechte Anfrage.

query = cloudant.query.Query(db,selector={'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['userid']) 

Das Hinzufügen von '_id' funktioniert zuerst gut, aber es dauert zu lange, um alle Dokumente zuerst zu erhalten.

query = cloudant.query.Query(db,selector={'_id':{'$gt':0},'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['userid']) 

Ich bekomme ähnliche Ergebnisse, wenn Sie $ in statt $ oder verwenden. Was fehlt mir, dass diese Abfrage schnell machen kann?

+0

Welchen Indextyp verwenden Sie: '" json "' oder '" text "'? Dieser Artikel hat eine gute Erklärung der Unterschiede: https://cloudant.com/blog/cloudant-query-grows-up-to-handle-ad-hoc-queries/ – brobes

Antwort

1

Für was es wert ist, erstellte ich einen "type": "json" Cloudant Query-Index und folgte der Python-Cloudant-Dokumentation unter http://python-cloudant.readthedocs.io/en/latest/getting_started.html, um einige einfache Testcode schreiben. Dieser Code-Schnipsel funktioniert für mich:

import cloudant 

client = cloudant.Cloudant("username", "password", account="account_name") 
client.connect() 
session = client.session() 
db = client['testdb'] 

query1 = cloudant.query.Query(db,selector={'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['_id', 'userid']) 
#query2 = cloudant.query.Query(db,selector={'_id':{'$gt':0},'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['_id', 'userid']) 

for doc in query1.result: 
    print doc 

client.disconnect() 

Es gibt:

{u'_id': u'266f9caae40012a04ce9223ccc67c8bd', u'userid': 35916} 
{u'_id': u'5ff2cb156d16783492adb3eb8e2e0aec', u'userid': 11035} 
+0

Hm, das ist seltsam. Ich frage mich, ob ich etwas anderswo geändert habe, das den fehlerhaften Anforderungsfehler auslösen würde. – pynewb

+0

np. Hat das für dich funktioniert? – brobes

+0

Ich bekomme immer noch den fehlerhaften Anforderungsfehler, selbst wenn Sie Ihren Code ausprobieren. Weißt du, was sonst noch dazu führen könnte? Wenn ich mehrere Indizes mit Benutzer-ID in ihnen eingerichtet habe, ist das ein Problem? – pynewb

0

Meine Beobachtung: $ oder und beschweren sich in Abfragen sogar $ über einen Index selbst zu finden, wenn die Abfrage auf _id und mit dem _all_docs Index. Ich denke, das läuft auf eine nicht sehr gute Abfrageplanung innerhalb der db-Engine hinaus. Ich benutze CouchDB 2.0.