admin管理员组

文章数量:1352869

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 plete in the browser.

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

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 plete in the browser.

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

Share Improve this question asked Sep 15, 2010 at 10:46 FossmoFossmo 2,8924 gold badges25 silver badges47 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 9

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 es 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.

That won't work with CouchDB alone. The best thing to try is the Lucene search engine which works well with CouchDB. Lucene is designed for full-text searching which is basically what you are looking for. Here are some instructions on the bination.

To implement your example, you could create a view which has your field as a key and the same field, the whole document or whatever you want as a value. If you query the view with the parameters startkey="co", endkey="cp", inclusive_end=false, you'll get all entries with a key that starts with "co".

Of course, this is less powerful than 'LIKE'.

本文标签: javascriptLikecondition in CouchDBStack Overflow