Couchbase - 慢速检索

时间:2017-02-01 22:06:44

标签: couchbase

我是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. Mary's AbC Deli

  3. 两份文件都会返回。您可能会注意到,我必须对搜索案例不敏感。这是根据用户请求。

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

    我查看了Couchbase Index。我不知道如何应用我的N1QL语句。 N1QL语句仍然需要在每个商店的JSON文档中搜索'passinname'。

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

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

    TIA 安东尼

1 个答案:

答案 0 :(得分:0)

你很幸运。与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