一、Nebula Graph - 全文索引

Nebula Graph 的全文索引,需要依靠于 Elasticsearch ,并且还存在着较多的限制,比如:

  • 全文索引当前仅支持LOOKUP语句。
  • 定长字符串长度超过 256 字节,将无法创建全文索引。
  • 如果 Tag/Edge type 上存在全文索引,无法删除或修改 Tag/Edge type
  • 一个 Tag/Edge type 只能有一个全文索引。
  • 属性的类型必须为String。
  • 全文索引不支持多个 Tag/Edge type 的搜索。
  • 不支持排序全文搜索的返回结果,而是按照数据插入的顺序返回。
  • 全文索引不支持搜索属性值为NULL的属性。
  • 不支持修改 Elastic Search 中的索引,只能删除重建。
  • 不支持管道符。
  • WHERE子句只能用单个条件进行全文搜索。
  • 全文索引不会与图空间一起删除。
  • 确保同时启动了 Elasticsearch 集群和 Nebula Graph,否则可能导致 Elasticsearch 集群写入的数据不完整。
  • 在点或边的属性值中不要包含'\,否则会导致 Elasticsearch 集群存储时报错。
  • 从写入 Nebula Graph,到写入 listener,再到写入 Elasticsearch 并创建索引可能需要一段时间。如果访问全文索引时返回未找到索引,可等待索引生效(但是,该等待时间未知,也无返回码检查)。
  • 使用 K8s 方式部署的 Nebula Graph 集群不支持全文索引。

了解上面的限制了就可以使用 Nebula Graph 的全文索引了,否则的话,可能就要自己操控 es 实现全文索引了。

在开始前,需要安装好 Nebula Graph 环境 和 Elasticsearch 环境,可以参考下面来那个我的博客:

Nebula Graph 集群搭建:https://blog.csdn.net/qq_43692950/article/details/124802962

Elasticsearch 7.X 集群搭建:https://blog.csdn.net/qq_43692950/article/details/122244793

二、创建全文索引模板

Elasticsearch 环境搭建好后,需要创建全文索引模板,向 es 服务器发送 POST 请求:

http://192.168.40.128:9200/_template/nebula_index_template

请求体内容:

{"template": "nebula*","settings": {"index": {"number_of_shards": 3,"number_of_replicas": 1}},"mappings": {"properties" : {"tag_id" : { "type" : "long" },"column_id" : { "type" : "text" },"value" :{ "type" : "keyword"}}}
}


进入 Nebula Graph 登录 Elasticsearch 客户端:

可以使用SIGN IN语句登录。必须使用 Elasticsearch 配置文件中的 IP 地址和端口才能正常连接,同时登录多个客户端,请在多个elastic_ip:port之间用英文逗号(,)分隔。

SIGN IN TEXT SERVICE (192.168.40.128:9200, HTTP);


查看文本搜索客户端:

SHOW TEXT SEARCH CLIENTS;


退出文本搜索客户端

SIGN OUT TEXT SERVICE;

三、部署 Raft listener

全文索引的数据是异步写入 Elasticsearch 的。流程是通过 Storage 服务的 Raft listener(简称 listener)这个单独部署的进程,从 Storage 服务读取数据,然后将它们写入 Elasticsearch 中。

下面需要准备一台或者多台额外的服务器,来部署 Raft listener。注意请保证 Nebula 各组件(Metad、Storaged、Graphd、listener)有相同的版本。

注意:只能为一个图空间“一次性添加所有的 listener 机器”。尝试向已经存在有 listener 的图空间再添加新 listener 会失败。因此,需在一个命令语句里完整地添加全部的 listener

listener 进程与 storaged 进程使用相同的二进制文件,但是二者配置文件不同,进程使用端口也不同,可以在所有需要部署 listener 的服务器上都安装 Nebula Graph,但是仅使用 Storage 服务。安装 Nebula Graph 的可以参考上面的两个链接。

下面可以在安装路径下的etc目录下找到 listener 的配置文件,文件名称必须为nebula-storaged-listener.conf

官方提供的模板地址:https://github.com/vesoft-inc/nebula/blob/master/conf/nebula-storaged-listener.conf.production


重命名:

mv nebula-storaged-listener.conf.production nebula-storaged-listener.conf

修改配置文件:

启动 listener:

./bin/nebula-storaged --flagfile /usr/local/nebula/etc/nebula-storaged-listener.conf

进入 Nebula Graph,添加 listener ,多个 listener 服务用逗号隔开 ,注意添加前需要选中一个 space

ADD LISTENER ELASTICSEARCH 192.168.40.171:9789;


查看 listener

SHOW LISTENER;


补充:删除图空间的所有 listener(谨慎操作)

注意:删除 listener 后,将不能重新添加 listener,因此也无法继续向 ES 集群同步,文本索引数据将不完整。如果确实需要,只能重新创建图空间。

REMOVE LISTENER ELASTICSEARCH;

四、全文搜索

进入上面添加 listener space 中。

创建测试 tag :

create tag team(team_name string, persion_num int);

添加测试数据:

insert vertex team(team_name, persion_num) values "team_1":("小明的团队", 42);
insert vertex team(team_name, persion_num) values "team_2":("小明的第二个团队", 42);
insert vertex team(team_name, persion_num) values "team_3":("小明的第三个团队", 42);
insert vertex team(team_name, persion_num) values "team_4":("小红的测试团队", 42);
insert vertex team(team_name, persion_num) values "team_5":("小红的开发团队", 42);

创建原生索引进行测试:

create tag index if not exists team_index on team(team_name(20));

重建索引:

rebuild tag index team_index;

使用原生索引查询

lookup on team where team.team_name == "小红的开发团队" yield id(vertex),properties(vertex);


下面创建全文索引:

注意:索引名称需要以 nebula 开头,原因就是上面创建 es 模板的时候就是指定的 以 nebula 开头。

create fulltext tag index nebula_team_full_index on team(team_name);


重建全文索引:

rebuild fulltext index;


查看全文索引:

show fulltext indexes;


使用全文索引:

PREFIX 前缀匹配

lookup on team where prefix(team.team_name, "小明") yield id(vertex),properties(vertex);


WILDCARD 通配符匹配

lookup on team where wildcard(team.team_name, "*测试*") yield id(vertex),properties(vertex);


REGEXP 正则匹配:

lookup on team where regexp(team.team_name, ".*开发.*") yield id(vertex),properties(vertex);


FUZZY 模糊查询:

fuzzy(schema_name.prop_name, fuzzy_string, fuzziness, operator, row_limit, timeout)

  • fuzziness:可选项。允许匹配的最大编辑距离。默认值为auto。查看其他可选值和更多信息,请参见 Elasticsearch 官方文档。
  • operator:可选项。解释文本的布尔逻辑。可选值为or(默认)和and。
lookup on team where fuzzy(team.team_name, "小明的开发团队",auto, or) yield id(vertex),properties(vertex);


扩展:补充:删除全文索引

drop fulltext index nebula_team_full_index ;

Nebula Graph - 全文索引相关推荐

  1. model存数据_Jepsen 测试框架在图数据库 Nebula Graph 中的实践

    在本篇文章中主要介绍图数据库 Nebula Graph 在 Jepsen 这块的实践. Jepsen 简介 Jepsen 是一款用于系统测试的开源软件库,致力于提高分布式数据库.队列.共识系统等的安全 ...

  2. 亿万级图数据库 Nebula Graph 的数据模型和系统架构设计

    Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可 ...

  3. 众测 Nebula Graph | 捉虫计划已开启,这项有礼

    Nebulan Graph 捉虫计划 是开源的分布式图数据库 -- Nebula 发起的「找 Bug」活动,旨在发动开源社区的力量共建图数据库 Nebula. Nebula Graph:一个开源的分布 ...

  4. 技术实践 | 用 NetworkX + Gephi + Nebula Graph 分析权力的游戏人物关系(上篇)

    本文转载自公众号:Nebula Graph Community . 我们都知道<权利的游戏>在全世界都很多忠实的粉丝,除去你永远不知道剧情下一秒谁会挂这种意外"惊喜", ...

  5. gephi生成网络关系图_用 NetworkX + Gephi + Nebula Graph 分析lt;权力的游戏gt;人物关系(上)

    我们都知道<权利的游戏>在全世界都很多忠实的粉丝,除去你永远不知道剧情下一秒谁会挂这种意外"惊喜",当中复杂交错的人物关系也是它火爆的原因之一,而本文介绍如何通过 Ne ...

  6. Nebula Graph 在企查查的应用

    本文首发于 Nebula Graph Community 公众号 解决思路 解决 K8s 部署 Nebula Graph 集群后连接不上集群问题最方便的方法是将 nebula-algorithm / ...

  7. Nebula Graph|信息图谱在携程酒店的应用

    本文首发于 Nebula Graph Community 公众号 对于用户的每一次查询,都能根据其意图做到相应的场景和产品的匹配",是携程酒店技术团队的目标,但实现这个目标他们遇到了三大问题 ...

  8. Nebula Graph 招募社区布道师

    点击上方"开源社"关注我们 | 编辑:钱英宇.李明康 | 设计:王福政 01 Nebula Graph 社区布道师 作为一款开源的数据库产品,社区对 Nebula Graph 团队 ...

  9. Nebula Graph学习篇1_基础概念、初步使用、整合SpringBoot使用

    目录 一.基础概念 图数据库的概念 适用场景 数据模型 路径 点的VID 架构 二.初步使用 Windows安装Nebula-Graph服务 Nebula Console 连接 Nebula-Grap ...

  10. GraphX 在图数据库 Nebula Graph 的图计算实践

    不同来源的异构数据间存在着千丝万缕的关联,这种数据之间隐藏的关联关系和网络结构特性对于数据分析至关重要,图计算就是以图作为数据模型来表达问题并予以解决的过程. 一.背景 随着网络信息技术的飞速发展,数 ...

最新文章

  1. LabVIEW实现PCB电路板元器件匹配定位(实战篇—7)
  2. 「人工智能视觉」一直被消费者忽视的工业领域应用
  3. 关于欧盟的芯片法案,ASML是这样看的!
  4. thymeleaf rs 查询结果_第十一章 JDBC与MySQL数据库(10)——通用查询
  5. 域名解析—MX和cname记录冲突
  6. 033_webpack打包ES6模块化工程
  7. Android中四种补间动画的使用示例(附代码下载)
  8. 马逊s3云存储接口_使用 Amazon S3 云服务轻松实现存储
  9. [Mysql]查看版本号的五种方式
  10. c语言优化冒泡法,C语言:冒泡法排序一组数,如何优化?
  11. 仅使用NumPy完成卷积神经网络CNN的搭建(附Python代码)
  12. 共享单车数据集_共享单车项目数据可视化展示
  13. 罗永浩“卖艺”还债能成?邀约不断,币圈抢着送钱
  14. 【BZOJ 1047】[HAOI2007]理想的正方形
  15. 【转载】Junit4详解一:Junit总体介绍
  16. sim7020c功耗_SIM7020C NB-IoT HAT教程
  17. 金蝶K3销售订单批量库存查询功能开发
  18. 地下城与勇士(DNF)安图恩副本(黑雾之源、震颤的大地、舰炮防御战、擎天之柱、能量阻截战、黑色火山、安徒恩的心脏)(童年的回忆)
  19. 灭霸一个响指,被腰砍的电子阅读市场步入终局之战?
  20. 三、HBase的优化(后期继续优化)

热门文章

  1. 智课雅思短语---一、be no exception
  2. 寄存柜程序模拟(C语言)
  3. Scrum板与Kanban如何抉择?prwnfivgd板与按照pgvhzd
  4. 键盘错误代码39解决方法
  5. python星空代码_Python中的唯美星空代码详解!
  6. java答题软件_非常实用的java自动答题计时计分器
  7. 突破封锁——MAC地址欺骗
  8. redis源码浅见之sds
  9. Bios开启CPU虚拟化后,进不了系统,解决办法如下
  10. 都市调频广播 2009年节目广告运行表