我是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市场
-
玛丽的AbC熟食店
两份文件都会返回 . 您可能会注意到,我必须对搜索案例不敏感 . 这是根据用户请求 .
我查看了Couchbase中的选项 . 我相信没有可行的手段来提高检索速度 . 我查看了Couchbase View . 我不知道如何应用我的N1QL语句 . couch.model.js脚本仅允许从视图中检索 . 它不允许输入不是键值的搜索条件 .
我查看了Couchbase Index . 我不知道如何应用我的N1QL语句 . N1QL语句仍然需要在每个商店的JSON文档中搜索'passinname' .
我甚至研究过Couchbase全文搜索 . 我不能使用这个选项 . 该部门制定了一项防止这种做法的政策 .
如果您有可能的解决方案,请随时提出建议 . 我非常感谢所有的建议 .
蒂安东尼
1 回答
你很幸运 . 与SQL不同,N1QL使用索引加速来处理此问题 . 有两种方法:一种用于任意子串,包括部分词,另一种用于整个单词和/或令牌 .
对于部分单词,请参阅SUFFIXES()函数 . 对于较短的字段(例如标签,名称, Headers )而言,它比较长的字段(例如,长描述)更合适 .
对于整个单词,请参阅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