couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Itaboraí <itabora...@gmail.com>
Subject Re: View advice
Date Fri, 08 Apr 2011 11:39:27 GMT
I would love to be able to do union operations like Keith described and I
would love even more to be able to send a javascript function to a view.
That function would then filter out the documents based on whatever criteria
I want, something like

function(doc) {
    // returns true to those documents I want to retrieve
    return doc.type == "Article" && (doc.location == "NY" || doc.location ==
"CA" );
}

You probably don´t even need the whole doc, filtering solely based on the
emitted keys through the function could do the trick. You´d still have to
specify an appropriate key range to speed up things though.

This would screw up the reduce results stored on the Btree, but I feel that
"view limited ad hoc querying" is such an important thing, that I would
forgo the speed of reduce in these cases.

Simple things should be possible, even if they conflict with design goals.

Daniel

On Fri, Apr 8, 2011 at 6:53 AM, Peter Matulla
<peter.matulla@googlemail.com>wrote:

> another approach:
>
> http://www.vertigrated.com/blog/2010/04/generic-ad-hoc-queries-in-couchdb/
>
> Peter
>
> ------------------------------------------------------------------------
>
> -------- Original Message  --------
> Subject: Re: View advice
> From: Olafur Arason <olafura@olafura.com>
> To: user@couchdb.apache.org
> Date: Freitag, 8. April 2011 07:57:25
>
> > You can fake it if you want:
> >
> > function(doc) {
> >   if(doc.type == "Article" && (doc.location == "NY" || doc.location ==
> "CA" )){
> >     emit(["NYCA", doc.release_date], doc)
> >   }
> > }
> >
> > Or join the discussion about why views should have search fields so this
> could
> > be resolved once and for all.
> >
> > They it would be:
> >
> > function(doc) {
> >   if(doc.type == "Article" )){
> >     emit(doc.release_date, doc, doc.location)
> >   }
> > }
> >
> > then query it with:
> >
> > _view/articles?limit=5&decending=true&search="NY OR CA"
> >
> > Btw you only need this to call it from couchapp. It's better not to have
> the
> > whole url so you can easily change hosts and even database names
> > like application-test.
> >
> > There is some work going on in this direction and it's important to let
> people
> > know that this is important.
> >
> > Regards,
> > Olafur Arason
> >
> > On Fri, Apr 8, 2011 at 03:13, Pierre-Alexandre Lacerte
> > <pierrealexandre.lacerte@gmail.com> wrote:
> >> I am currently trying to create a view to reproduce this SQL query:
> >>
> >> SELECT * FROM articles WHERE articles.location="NY" OR
> articles.location="CA" ORDER BY articles.release_date DESC
> >>
> >> I tried to create a view with a complex key: function(doc) { if(doc.type
> == "Article") { emit([doc.location, doc.release_date], doc) } }
> >>
> >> And then using startkey and endkey to retrieve one location and ordering
> the result on the release date.
> >>
> >>
> http://myhost.com:8000/mydb/_design/application/_view/articles?startkey=["NY",
> {}]&endkey=["NY"]&limit=5&descending=true
> >>
> >> This works fine.
> >>
> >> However, I learned that I cannot send multiple startkeys and endkeys to
> my view. (To mimic WHERE articles.location="NY" OR articles.location="CA")
> >>
> >> How should I design this? (It could happen that I would need to query
> for 15 different locations)
> >>
> >> So far, I have 3 suggestions:
> >> 1- Store the view output in its own database, and make a new view to
> sort by release date. I'm not sure if this option will be fast and scale
> well...
> >> 2- Use couchdb-lucene.
> >> 3- Hack my version to support multiple startkeys or endkeys.
> https://issues.apache.org/jira/browse/COUCHDB-523
> >>
> >> Thanks for your help,
> >>
> >> Pierre
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message