2016-07-24 8 views
0

"userid"フィールドのインデックスが設定されています。私がandとorを使って試してみると、悪い要求が出ます。最初の「_id」を追加

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

が正常に動作しますが、それは最初にすべてのドキュメントを取得するには時間がかかりすぎます。

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

$や$の代わりに$ inを使用すると、同様の結果が得られます。このクエリをすばやく行うことができないものは何ですか?

+0

どのインデックスタイプを使用していますか:「json」または「text」?この記事では相違点について説明しています。https://cloudant.com/blog/cloudant-query-grows-up-to-handle-ad-hoc-queries/ – brobes

答えて

1

私は"type": "json"クラウドクエリインデックスを作成し、http://python-cloudant.readthedocs.io/en/latest/getting_started.htmlのpython-cloudantドキュメントに続いて、簡単なテストコードを書きました。このスニペットは、私の作品:

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() 

それを返します:

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

奇妙です。私は、他の場所で何かを変更して、悪いリクエストエラーを引き起こすかどうか疑問に思います。 – pynewb

+0

np。これはあなたのために機能しましたか? – brobes

+0

あなたのコードを試しても、依然として悪いリクエストエラーが出ます。他に何が起こるかも知っていますか?もし私が複数のインデックスを設定しているのであれば、それは問題ですか? – pynewb

0

私の観察:$かとクエリで$でもインデックスが見つからない文句をしても_idに照会し、_all_docsインデックスを使用している場合。これは、dbエンジン内の非常に良いクエリ計画ではないと思います。私はCouchDB 2.0を使用しています。