我是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文档信息。例如,如果我有名为:
的商店ABC市场
Mary's AbC Deli
两份文件都会返回。您可能会注意到,我必须对搜索案例不敏感。这是根据用户请求。
我查看了Couchbase中的选项。我相信没有可行的手段来提高检索速度。我查看了Couchbase View。我不知道如何应用我的N1QL语句。 couch.model.js脚本仅允许从视图中检索。它不允许输入不是键值的搜索条件。
我查看了Couchbase Index。我不知道如何应用我的N1QL语句。 N1QL语句仍然需要在每个商店的JSON文档中搜索'passinname'。
我甚至研究过Couchbase全文搜索。我不能使用这个选项。该部门制定了一项防止它的政策。
如果您有可能的解决方案,请随时提出建议。我非常感谢所有的建议。
TIA 安东尼
答案 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