1

次のように、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 のバグですか?

4

1 に答える 1

4

メソッドを使用しstaleて で false に設定できますViewQuery。これにより、結果を返す前にインデックス作成が完了するまで待機することが強制されます。

于 2015-04-25T10:28:54.833 に答える