Je crée une vue dans le code en utilisant l'API Java 2.1.2 Couchbase comme ceci:Création de vues Couchbase dans le code: retourne première requête 0 lignes, index construit en arrière-plan
DefaultView view = DefaultView.create(viewName, jsMapFunctionAsString);
List<View> views = new ArrayList<>();
views.add(view);
DesignDocument doc = DesignDocument.create(name, views);
bucket.bucketManager().insertDesignDocument(doc);
Appel ViewResult result = bucket.query(ViewQuery.from(name, viewName))
directement après l'insertion du document, viewResult.success()
retourne toujours vrai, mais les deux itérateurs rows()
et iterator
retournent 0 lignes (il y a certainement des résultats présents.Quand j'exécute la vue dans l'interface Web, il renvoie des valeurs correctes).
La solution que je trouve au bout de quelques heures est d'appeler query
deux fois avec assez de temps d'attente entre comme
ViewResult result = bucket.query(ViewQuery.from(name, viewName));
Thread.sleep(10000);
result = bucket.query(ViewQuery.from(name, viewName));
Le deuxième appel sera ensuite retourner le résultat correct.
Il semble que Couchbase doive d'abord construire l'index pour la requête, mais retourne directement, même avant la construction de l'index.
Attendre 10 secondes n'est bien sûr pas optimal, peut-être que la création de l'index prendra plus de temps dans le futur. Donc, ma question est: comment puis-je m'assurer que j'attends seulement que l'index soit construit?
Est-ce un bug dans l'API?
@Bohemian Avec la version 3, ils ont introduit un langage de requête de type SQL appelé N1QL. Je n'ai pas encore essayé. Nous sommes très satisfaits de Couchbase, mais nous n'avons pas non plus besoin de beaucoup de requêtes. – Sebastian
@Sebastian Il y a un [aperçu du développeur] (http://docs.couchbase.com/4.0/admin/whats-new.html#topic_hdg_nkd_54) de Couchbase Server 4 qui prend en charge N1QL, les index secondaires globaux et multidimensionnels index spatiaux avec lesquels vous pourriez vouloir jouer. – Paddy