Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Like-condition in CouchDB

I want to perform a LIKE-condition (SQL syntax) in CouchDB. How can this be done? The LIKE-condition will be used to perform auto complete in the browser.

I want to write "co" in the input field and get the results Coffee, Couch, CouchDB ect.

like image 720
Fossmo Avatar asked Sep 15 '10 10:09

Fossmo


1 Answers

It is very easy to search for letters at the beginning of a string. You just need a view that emits the string you want to search for as the key. Assuming the user input is stored in a variable q, you then call that view with the parameters startkey=q and endkey=q+"\ufff0".

The trick here is to append the highest possible Unicode character to the search string. In the sort order, this string comes after anything else starting with q. (This is much easier to implement than the solution suggested by @titanoboa, where you need to "increment" the last letter of the user input.)

If you also want to be able to find words in the middle of a string (e.g. "The Colbert Report" when typing "co"), you could use a view like this:

function(doc) {
  if (doc.title) {
    var words = {};
    doc.title.replace(/\w+/g, function(word) {
      words[word.toLowerCase()] = true;
    });
    for (w in words) {
      emit(w, doc);
    }
  }
}

Of course this is only advisable for short strings. For searching in longer texts you should look into a full-text search add-on like couchdb-lucene.

like image 137
Christian Berg Avatar answered Nov 09 '22 23:11

Christian Berg