【问题标题】:Couchbase - Slow RetrievalCouchbase - 慢检索
【发布时间】:2017-02-01 22:06:44
【问题描述】:

我是 Couchbase/AngularJS/Express.js/Node.JS 应用程序的开发人员。应用程序当前状态是用户测试的开始。当用户访问新应用程序时,用户希望从 Couchbase 检索检索以检查效率。用户觉得搜索从 Couchbase 返回的时间太长。作为一个有经验的 SQL 程序员和学习 N1QL,我的 SQL 经验告诉我这个请求是不可行的。

该过程涉及以下内容:

  • 1700 到 1800 个 JSON 文档

  • 预期回报是零或一些文件

  • 所有文件都是不可能的(稍后会解释)。

  • 数据必须穿越大西洋,因为数据和应用程序将驻留在英格兰境内的机器上。

用户将至少输入三个字符来搜索名称,并期望返回包含输入字符的名称列表。请记住,用户输入的字符越多,搜索就越精细。用户问题是返回需要几秒钟。

N1QL 语句如下所示:

SELECT id,
       name,
       abbr,
       meta(bucket).id meta_id
 FROM bucket
WHERE type = 'store'
  and Upper(name) like Upper('%passedinname%’)
order by name

如果用户输入“ABC”,N1QL 语句将返回存储 JSON 文档名称中包含“ABC”的所有 JSON 文档信息。例如,如果我有名为:

  1. ABC 市场

  2. 玛丽的ABC熟食店

两个文件都会返回。正如您可能注意到的,我必须保持搜索不区分大小写。这是根据用户的要求。

我查看了 Couchbase 中的选项。我相信没有可行的方法来提高检索速度。我查看了 Couchbase View。我看不出如何对它应用我的 N1QL 语句。 couch.model.js 脚本只允许从视图中检索。不允许输入非键值的搜索条件。

我查看了 Couchbase 索引。我也看不到如何对它应用我的 N1QL 语句。 N1QL 语句仍需要在每个商店 JSON 文档中搜索“passedinname”。

我什至研究了 Couchbase 全文搜索。我不能使用这个选项。该部门已经制定了一项政策来防止它。

如果您有可能的解决方案,请随时提出建议。我非常感谢所有建议。

TIA 安东尼

【问题讨论】:

    标签: couchbase


    【解决方案1】:

    你很幸运。与 SQL 不同,N1QL 通过索引加速处理这个问题。有两种方法:一种用于任意子字符串,包括部分单词,另一种用于整个单词和/或标记。

    对于部分单词,请参见 SUFFIXES() 函数。它更适合较短的字段(例如标签、名称、标题)而不是较长的字段(例如长描述)。

    对于整个单词,请参阅 TOKENS() 和 SPLIT()。

    这两种方法都在这些文章中进行了描述。

    https://dzone.com/articles/a-couchbase-index-technique-for-like-predicates-wi

    https://dzone.com/articles/split-and-conquer-efficient-string-search-with-n1q

    https://dzone.com/articles/more-than-like-efficient-json-search-with-couchbas

    【讨论】:

    • 感谢您的回复。看来我可以使用 SUFFIXES 功能。我需要找出预期的升级时间表。由于该版本目前不包含 SUFFIXES 功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2017-04-22
    • 1970-01-01
    • 2019-11-21
    相关资源
    最近更新 更多