incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Robert Newson <robert.new...@gmail.com>
Subject Re: Cooking Views
Date Fri, 15 Oct 2010 16:43:49 GMT
Boolean queries can be achieved with a different index, fed from a
couchdb database.

For example: http://github.com/rnewson/couchdb-lucene

B.

On Fri, Oct 15, 2010 at 5:29 PM, Terry Brownell <terrybrownell@gmail.com> wrote:
> Thank Mark,
>
> My initial hunch was CouchDB isn't particularly suited as a triple store or
> running sparql type of queries .. too bad.. i was really digging the whole 2
> tier / replication thing.
>
> Terry
>
> On Fri, Oct 15, 2010 at 6:34 AM, Mark J. Reed <markjreed@gmail.com> wrote:
>
>> On Thu, Oct 14, 2010 at 7:00 PM, Terry Brownell
>> <terry.brownell@trinitypower.com> wrote:
>> > Hi, attempting to port my semantic network DB to CouchDB, but I'm not
>> > grokking the more complicated views, and in particular passing variables.
>>
>> Depending on the types of query you anticipate, Couch (at least
>> without Solr) might not be the best choice for this problem domain.
>> In my experience it works best with canned queries that don't vary
>> much; if you have a bunch of ad-hoc queries with different types of
>> logic being composed on the fly, you may want to look at either adding
>> Solr to the mix or switching to another storage technology like
>> MongoDB.
>>
>> Having said that, here's how I would solve your specific problem in bare
>> Couch.
>>
>> > Looking for a cookbook recipe for creating a view (against the documents
>> > below), that...
>> >
>> > - Selects all documents where "isa" = "bird", that has a nemesis, and
>> color
>> > is a variable ie: all yellow?
>>
>> Create a view with a map function that emits the variable part as the
>> key, but only for documents matching the non-variable criteria.  For
>> example,
>>
>> "map": "function(doc) { if (doc.nemesis && doc.isa == 'bird') {
>> emit(doc.color, doc.nemesis) }}"
>>
>> Then query that view with ?key="yellow".
>>
>> You can make it more flexible by emitting a complex key consisting of
>> [doc.isa, doc.color], instead of making it conditional on isa; then
>> you would query for key=["bird","yellow"].  What that gains you is the
>> ability not only to query for different combinations of animal and
>> color, but also to use a range query to look for specific animal types
>> regardless of color (e.g. startkey=["bird"]&endkey=["bird",{}] to get
>> all the nemesis-having birds). But order matters; with isa first, this
>> view doesn't help you if you want to query for all yellow
>> nemesis-having animals whether they're a bird or not.  You would have
>> to construct a different view for that.
>>
>> --
>> Mark J. Reed <markjreed@gmail.com>
>>
>

Mime
View raw message