CouchDB中的Like-condition

时间:2010-09-15 10:46:15

标签: javascript couchdb

我想在CouchDB中执行LIKE条件(SQL语法)。如何才能做到这一点? LIKE条件将用于在浏览器中执行自动完成。

我想在输入字段中写“co”并获得结果Coffee,Couch,CouchDB等。

3 个答案:

答案 0 :(得分:9)

在字符串的开头搜索字母非常容易。您只需要一个视图,将您要搜索的字符串作为键发出。假设用户输入存储在变量q中,则使用参数startkey=qendkey=q+"\ufff0"调用该视图。

这里的技巧是将最高的Unicode字符附加到搜索字符串。在排序顺序中,此字符串位于以q开头的任何其他内容之后。 (这比@titanoboa建议的解决方案更容易实现,你需要“增加”用户输入的最后一个字母。)

如果您还希望能够在字符串中间找到单词(例如,在输入“co”时输入“The Colbert Report”),您可以使用如下视图:

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);
    }
  }
}

当然这只适用于短串。要在较长的文本中进行搜索,您应该查看全文搜索插件,例如couchdb-lucene

答案 1 :(得分:0)

单独使用CouchDB无法实现。最好的尝试是Lucene搜索引擎,它与CouchDB配合得很好。 Lucene专为全文搜索而设计,基本上就是您所寻找的。 Here是关于组合的一些说明。

答案 2 :(得分:0)

要实现您的示例,您可以创建一个视图,该视图将您的字段作为键和相同的字段,整个文档或您想要的任何值作为值。如果使用参数startkey="co", endkey="cp", inclusive_end=false查询视图,您将获得所有带有以“co”开头的键的条目。

当然,这不如'LIKE'强大。