Also, does the postFilter happen before or after reducing? P.S. - Just a heads up. It seems the main documentation on the Couchbase Mobile site is a bit out of date. Had to check the docs on Github to find postFilter.
On Tuesday, February 3, 2015 at 9:56:29 AM UTC-4, Kevin Lord wrote: > > Thanks Jens, that makes sense. > > As for your last example, that would allow me to do whole matches on the > individual parts of the string. However, and this is stretching this > particular example a bit, what if I wanted to match on a partial first name > or last name? Say I've broken the name up as much as I can beforehand, and > emitted the multiple keys, but I'd like to get all results that start with > "Jon" including both "Jon" and "Jonathan". Also, potentially more > difficult, I'd like to match the ending of an individual name component? > Would I need to move to the postFilter predicate for this? > > On Tuesday, February 3, 2015 at 3:11:55 AM UTC-4, Jens Alfke wrote: >> >> >> On Feb 2, 2015, at 5:36 PM, Kevin Lord <[email protected]> wrote: >> >> Is it possible to use any kind of regular expressions or wildcards in >> string keys when querying a view? I would really like to match on portions >> of a string aside from the beginning. >> >> >> In general, you can do this by querying the entire view (i.e. not setting >> any startKey or endKey) and then using a postFilter predicate to do the >> string matching. >> >> That may sound inefficient — and it is! — but that kind of search is >> inevitably inefficient since it can't use an index to narrow down the keys. >> (A SQL query would do exactly the same thing, behind the scenes.) >> >> eg. if I have a name property, with document that has the value "John >> Michael Smith", I would like to query using a key "*Smith" or "*Michael*" >> etc. >> >> >> A much more efficient way to do a search like this would be to make your >> map function emit each component of the name as a separate key. For >> example, something like >> emit(doc.firstName, nil); >> if (doc.middleName) emit(doc.middleName, nil); >> emit(doc.lastName, nil); >> (You don't have to store the name broken into components like that; if >> it's in a single string property, the map function can just split it by >> spaces and emit each component.) >> Then you can query for a name component like "Smith" or "Michael" by >> setting that as the key, and find all instances of it. >> >> —Jens >> > -- You received this message because you are subscribed to the Google Groups "Couchbase Mobile" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/mobile-couchbase/8178551a-9a9c-4356-8d13-72fb15940bce%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
