0

我是 Couchdb 新手。

我已经创建了一个视图,用于在我的产品上执行“类似 SQL”(键都是代码和描述词)。

function (doc) {
    if (doc.type === 'product') {
        var words = { };
        var text = doc.code + ' ' + doc.description;
        text.replace(/\w+/g, function(word) {
            words[word.toLowerCase()] = true;
        });
        for (var w in words) {
            emit(w, doc);
        }
    }
}

我的产品也属于给定类别。我想允许用户从给定类别中获取 Productso ,然后在该子集上应用该 LIKE

对产品类别进行第二次查看将解决按类别过滤的问题

问题

执行此操作的 couchdb 方法是什么?

我看到的选项是:

  1. 构建一个名为like_by_category的视图,其中键是复合 [category, word]。

  2. 按类别运行第一个视图过滤,稍后按单词运行,然后手动加入两个结果集以查看两者都有哪些结果

任何绳子都可以帮助我摆脱这个洞!

选项1只是理论,不知道它是否能让我轻松进行分页。

选项 2 也只是理论,但我不确定执行这 2 个视图运行的性能,特别是在运行http://www.pouchdb.com的移动设备上

4

1 回答 1

0
  1. 在 CouchDB 上,如果您想进行全文搜索,那么您最好的选择是CouchDB Lucene 插件。在紧要关头分割空格是可行的,但是对于像 work/works/worked/working 这样的形态变形,特别是对于非英语语言,你需要一个真正的分词器。
  2. 在 PouchDB 上,有PouchDB Search插件,遗憾的是目前性能不是很好,因为它将整个数据库读入内存。如果您只针对移动设备(我假设这意味着“iOS 和 Android”),您应该使用 WebSQL 研究 SQLite 的 FTS 功能。这里有一些关于 FTS 的讨论和一个活生生的例子
于 2014-05-30T17:45:27.060 回答