次のように、Couchbase Java API 2.1.2 を使用してコードでビューを作成しています。
DefaultView view = DefaultView.create(viewName, jsMapFunctionAsString);
List<View> views = new ArrayList<>();
views.add(view);
DesignDocument doc = DesignDocument.create(name, views);
bucket.bucketManager().insertDesignDocument(doc);
ViewResult result = bucket.query(ViewQuery.from(name, viewName))
ドキュメントを挿入した直後に呼び出すと、viewResult.success()
常に true が返されますが、反復子rows()
とiterator
戻り値の両方で 0 行が返されます (確実に結果が存在します。Web インターフェイスでビューを実行すると、正しい値が返されます)。
query
数時間後に見つけた回避策は、間に十分な待ち時間を置いて2回電話することです
ViewResult result = bucket.query(ViewQuery.from(name, viewName));
Thread.sleep(10000);
result = bucket.query(ViewQuery.from(name, viewName));
2 番目の呼び出しは、正しい結果を返します。
Couchbase は最初にクエリのインデックスを構築する必要があるように見えますが、インデックスが構築される前であっても、直接返されます。
もちろん、10 秒待つのは最適ではありません。今後、インデックスの作成にさらに時間がかかる可能性があります。
私の質問は、インデックスが構築されるまで待つことをどのように確認できますか?
これは API のバグですか?