ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DQL-2.6.开始Dgraph-高级文本搜索

2021-12-08 11:02:57  阅读:280  来源: 互联网

标签:Dgraph 正则表达式 标签 搜索 hashtag DQL regexp 2.6


翻译自:这里

在上一篇教程中,我们通过建模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
  }
}

标签:Dgraph,正则表达式,标签,搜索,hashtag,DQL,regexp,2.6
来源: https://www.cnblogs.com/no-celery/p/15660380.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有