java - 在代码 : First query returns 0 rows, 索引中创建 Couchbase View 在后台构建

标签 java couchbase couchbase-view couchbase-java-api

我正在使用 Couchbase Java API 2.1.2 在代码中创建一个 View ,如下所示:

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 界面中执行 View 时,它返回正确的值)。

几个小时后我发现的解决方法是调用 query 两次,中间有足够的等待时间

ViewResult result = bucket.query(ViewQuery.from(name, viewName));
Thread.sleep(10000);
result = bucket.query(ViewQuery.from(name, viewName));

第二次调用将返回正确的结果。

似乎 Couchbase 必须先为查询建立索引,然后直接返回,甚至在建立索引之前。
等待 10 秒当然不是最优的,也许将来创建索引会花费更多时间。

所以我的问题是,我怎样才能确保我只等到索引已经建立?
这是 API 中的错误吗?

最佳答案

您可以使用 stale 方法并在 ViewQuery 中将其设置为 false,这将强制等待索引完成后再返回结果。

关于java - 在代码 : First query returns 0 rows, 索引中创建 Couchbase View 在后台构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29863161/

相关文章:

android - Couchbase Lite - 按值排序 Map/Reduce

c# - 带有 Azure Linux VM 的 Couchbase

Couchbase 4010错误

java - 如果从 hashmap 作为值返回,为什么向下转型不会抛出异常

java - 如何在Java控制台应用程序中制作进度条?

java - 使用 GSON 创建 map 或集

python - 使用 Couchbase 在给定半径内搜索文档

couchbase - 如何获取coauchbase View 中的参数值

Java 'System.err.format' 和 '%n' 后跟 'System.out.println' , println 在中间打印

java - 将 SoapUI JUnit 结果导入 SonarQube