DQL-2.6.开始Dgraph-高级文本搜索
翻译自:这里
在上一篇教程中,我们通过建模tweet作为示例,学习了如何在Dgraph中构建社交图。我们使用散列和精确索引查询tweet,并实现一个基于关键字的搜索,使用术语索引及其函数查找您喜欢的tweet。
在本教程中,我们将继续学习Dgraph中的高级文本搜索功能。
具体来说,我们将关注两个高级特性:
- 使用全文搜索搜索tweet。
- 使用正则表达式搜索搜索标签。
在我们深入之前,让我们快速回顾一下如何在Dgraph中建模tweets。
全文搜索
sorry ... 这个全文搜索暂时楼主没有开始研究, 原因暂不透漏, 哈哈
正则表达式搜索
正则表达式是表达搜索模式的强大方法。Dgraph允许您基于正则表达式搜索字符串谓词。您需要在字符串谓词上设置trigram索引,以便能够执行基于正则表达式的查询。
使用基于正则表达式的搜索,让我们匹配具有这种特定模式的所有标签:以任意长度的字符开始和结束,但以其中的子字符串graph结束。
下面是我们可以使用的正则表达式:^.graph.$
如果您不熟悉编写正则表达式,请查看这里。
让我们首先使用has()函数查找数据库中的所有标签。
{
hash_tags(func: has(hashtag)) {
hashtag
}
}
您可以看到我们总共有6个标签,其中4个标签中包含子字符串图:Dgraph、GraphQL、graphqlconf、graphDB。
我们应该使用内置函数regexp,以便能够使用正则表达式搜索谓词。这个函数有两个参数,第一个是谓词的名称,第二个是正则表达式。
下面是regexp函数的语法:regexp(predicate, /regular-expression/)
让我们执行以下查询来查找具有子字符串图的标签。
转到查询选项卡,输入查询,然后单击Run。
{
reg_search(func: regexp(hashtag, /^.*graph.*$/)) {
hashtag
}
}
哦!我们有一个错误!看起来我们忘记了在标签谓词上设置三元组索引trigram。
同样,设置trigram索引类似于设置任何其他字符串索引,让我们对hashtag谓词进行设置。
现在,让我们重新运行regexp查询。
但是结果中只有以下标签:Dgraph和graphqlconf。这是因为regexp函数在默认情况下是区分大小写的。
在regexp函数的第二个参数的末尾添加字符i,使其不区分大小写:
现在我们有了四个带有子字符串graph的标签。
让我们修改正则表达式,只匹配前缀为graph的标签。
{
reg_search(func: regexp(hashtag, /^graph.*$/i)) {
hashtag
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)