2010-07-19 7 views
6

Je commence par CouchDB et j'ai besoin d'un peu d'aide.Requêtes dynamiques complexes dans CouchDB

J'ai beaucoup de données répertoriées par l'utilisateur dans un tableau. L'utilisateur devrait être capable de filtrer ces données par plusieurs paramètres dynamiques.

E.g. supposez une table avec les champs date, auteur, tags, is_published, title.

L'utilisateur doit être en mesure de spécifier un filtre comme "Contient tag 'couchdb' et is_published = true" ou "date est dans le mois dernier et l'auteur est moi".

Comment de telles requêtes fonctionnent dans CouchDB?

Répondre

7

Je pense que la réponse standard pour les requêtes complexes est d'utiliser Lucene. Peut-être pas la réponse que vous cherchiez, mais Lucene a des capacités de filtrage plus avancées.

Jetez un oeil à couchdb-lucene on github. Il y a aussi une autre page sur le wiki couchDB à propos de full text indexing.

+0

Rivières ElasticSearch [est parti] (https://www.elastic.co/blog/deprecating-rivers) donc le 2ème lien ici est obsolète, mais il y a maintenant https://github.com/logstash-plugins/ logstash-input-couchdb_changes et https://www.elastic.co/guide/fr/logstash/current/_how_to_write_a_logstash_input_plugin.html –

3

La solution prête à l'emploi consiste à créer ces requêtes avant de les introduire dans vos documents de conception. Si vous pensez, correctement ou incorrectement, que cela va limiter vos utilisateurs, suivez la suggestion de andyuk et regardez couchdb-lucene.

Bien que je serais méfiant si vous ne pouviez pas faire ce que vous recherchez dans quelques requêtes de map/reduce. Rappelez-vous, vous pouvez émettre() plus d'une fois dans une fonction de carte.