在不使用模型的情况下在球流中进行选择性索引

2023-12-25

我正在将bulbflow(python)与Neo4j一起使用,并且我正在尝试添加索引only在我的键的子集上(目前,只是名为“name”的键,用于可选的基于索引的查找)。

我不喜欢球流模型(限制太多),并且我无法弄清楚如何在不更改代码的情况下进行选择性索引,因为“自动索引”是一个全局设置 - 我不知道如何根据钥匙。

有人做过这样的事吗?

-Andrew


您可以通过设置禁用灯泡自动索引g.config.autoindex to False.

See https://github.com/espeed/bulbs/blob/master/bulbs/config.py#L62 https://github.com/espeed/bulbs/blob/master/bulbs/config.py#L62

>>> from bulbs.neo4jserver import Graph
>>> g = Graph()
>>> g.config.autoindex = False
>>> g.vertices.create(name="James")

在上面的例子中,这将导致name属性不会被自动索引。

Setting autoindex to False将切换到使用低级客户端create_vertex()方法而不是create_indexed_vertex() method:

See https://github.com/espeed/bulbs/blob/master/bulbs/neo4jserver/client.py#L422 https://github.com/espeed/bulbs/blob/master/bulbs/neo4jserver/client.py#L422

The create_indexed_vertex()方法有一个keysarg,可用于选择性索引:

See https://github.com/espeed/bulbs/blob/master/bulbs/neo4jserver/client.py#L424 https://github.com/espeed/bulbs/blob/master/bulbs/neo4jserver/client.py#L424

这是低级的client灯泡模型使用的方法。您通常不需要显式调用低级客户端方法,但如果这样做,您可以通过在键参数中包含属性名称来选择性地索引属性。

要选择性地索引模型中的属性,只需覆盖get_index_keys()在您的模型定义中:

See https://github.com/espeed/bulbs/blob/master/bulbs/model.py#L383 https://github.com/espeed/bulbs/blob/master/bulbs/model.py#L383

默认情况下,灯泡模型索引所有属性。如果没有提供键,则所有属性都会被索引(就像在 TinkerPop/Blueprints 中一样)。

请参阅 Model _create() 和 get_bundle() 方法:

  • _create() https://github.com/espeed/bulbs/blob/master/bulbs/model.py#L583 https://github.com/espeed/bulbs/blob/master/bulbs/model.py#L583
  • get_bundle() https://github.com/espeed/bulbs/blob/master/bulbs/model.py#L363 https://github.com/espeed/bulbs/blob/master/bulbs/model.py#L363
  • get_index_keys() https://github.com/espeed/bulbs/blob/master/bulbs/model.py#L383 https://github.com/espeed/bulbs/blob/master/bulbs/model.py#L383

为了启用通用顶点和边的选择性索引,我更新了 Bulbs 通用顶点/边方法以包含_keysarg,您可以在其中提供要索引的属性名称(键)列表。

See https://github.com/espeed/bulbs/commit/4fe39d5a76675020286ec9aeaa8e71d58e3a432a https://github.com/espeed/bulbs/commit/4fe39d5a76675020286ec9aeaa8e71d58e3a432a

现在,要选择性地索引通用顶点/边上的属性,您可以提供要索引的属性名称列表:

>>> from bulbs.neo4jserver import Graph
>>> g = Graph()
>>> g.config.autoindex = False
>>> james = g.vertices.create(name="James", city="Dallas", _keys=["name"])
>>> julie = g.vertices.create(name="Julie", city="Dallas", _keys=["name"])
>>> g.edges.create(james, "knows", julie, timestamp=12345, someprop="somevalue", _keys=["someprop"])

在上面的例子中,name属性将为每个顶点建立索引,并且someprop将为边缘建立索引。注意city and timestamp不会被索引,因为这些属性名称未明确包含在索引键列表中。

If g.config.autoindex is True and _keys is None(默认),所有属性都将被索引(就像以前一样)。

If g.config.autoindex is False and _keys is None,不会对任何属性建立索引。

If _keys显式设置为属性名称列表,只有这些属性才会被索引,无论是否g.config.autoindex is True or False.

See https://github.com/espeed/bulbs/blob/master/bulbs/neo4jserver/client.py#L422 https://github.com/espeed/bulbs/blob/master/bulbs/neo4jserver/client.py#L422

NOTE:如果您使用 Neo4j Server、Rexster 或 Titan Server,自动索引的工作方式会有所不同,并且所有图形数据库服务器的索引架构在过去几个月中一直处于不断变化的状态。似乎所有系统都从手动索引系统转向自动索引系统。

对于直到最近才具备自动索引功能的图形数据库服务器(例如 Neo4j Server),Bulbs 通过使用数据库的低级手动索引方法的自定义 Gremlin 脚本启用了自动索引:

  • https://github.com/espeed/bulbs/blob/master/bulbs/neo4jserver/client.py#L1008 https://github.com/espeed/bulbs/blob/master/bulbs/neo4jserver/client.py#L1008
  • https://github.com/espeed/bulbs/blob/master/bulbs/neo4jserver/gremlin.groovy#L11 https://github.com/espeed/bulbs/blob/master/bulbs/neo4jserver/gremlin.groovy#L11

但是,Neo4j Server、TinkerPop/Rexster 和 Titan Server 中已弃用手动索引,因此 Bulbs 0.4 索引架构将相应更改。通过预先声明索引键,选择性索引仍然是可能的,就像在 SQL 中一样create table陈述。

BTW:您觉得模特受到什么限制吗?灯泡模型(实际上是整个库)的设计非常灵活,因此您可以将其修改为您需要的任何内容。

有关如何自定义灯泡模型的信息,请参阅灯泡示例:Neo4j 的灯泡框架中是否有相当于 commit 的功能 https://stackoverflow.com/questions/16759606/is-there-a-equivalent-to-commit-in-bulbs-framework-for-neo4j/16764036#16764036

如果您有任何疑问,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在不使用模型的情况下在球流中进行选择性索引 的相关文章

  • 如何覆盖 Django 的默认管理模板和布局

    我正在尝试覆盖 Django 的默认模板 现在只有base site html 我正在尝试更改 django 管理文本 我做了以下事情 我在我的应用程序目录中创建了一个文件夹 opt mydjangoapp templates admin
  • 从 SHAP 值中获取特征重要性

    我想要获得重要功能的数据框 通过下面的代码 我得到了 shap values 但我不确定这些值的含义是什么 在我的 df 中有 142 个特征和 67 个实验 但得到了一个带有 ca 的数组 2500 个值 explainer shap T
  • 嵌套字典中的 Django 模板

    我正在使用 Django 模板 并且遇到了嵌套字典的一个问题 Dict result dict type 0 file name abc count 0 type 1 file name xyz count 50 我的 HTML 文件中的模
  • ValueError:不支持连续[重复]

    这个问题在这里已经有答案了 我正在使用 GridSearchCV 进行线性回归的交叉验证 不是分类器也不是逻辑回归 我还使用 StandardScaler 对 X 进行标准化 我的数据框有 17 个特征 X 和 5 个目标 y 观察 约11
  • CNTK 抱怨 LSTM 中的动态轴

    我正在尝试在 CNTK 中实现 LSTM 使用 Python 来对序列进行分类 Input 特征是固定长度的数字序列 时间序列 标签是 one hot 值的向量 Network input input variable input dim
  • Alembic:如何迁移模型中的自定义类型?

    My User模型是 class User UserMixin db Model tablename users noinspection PyShadowingBuiltins uuid Column uuid GUID default
  • 揭秘sharedctypes性能

    在 python 中 可以在多个进程之间共享 ctypes 对象 然而我注意到分配这些对象似乎非常昂贵 考虑以下代码 from multiprocessing import sharedctypes as sct import ctypes
  • 如何使用 Bokeh 动态隐藏字形和图例项

    我正在尝试在散景中实现复选框 其中每个复选框应显示 隐藏与其关联的行 我知道可以通过图例来实现这一点 但我希望这种效果同时在两个图中发生 此外 图例也应该更新 在下面的示例中 出现了复选框 但不执行任何操作 我显然不明白如何更新用作源的数据
  • Python Pandas:如何对组中的所有项目进行分组并为其分配 id?

    我有 df domain orgid csyunshu com 108299 dshu com 108299 bbbdshu com 108299 cwakwakmrg com 121303 ckonkatsunet com 121303
  • GradientTape 根据损失函数是否被 tf.function 修饰给出不同的梯度

    我发现计算的梯度取决于 tf function 装饰器的相互作用 如下所示 首先 我为二元分类创建一些合成数据 tf random set seed 42 np random seed 42 x tf random normal 2 1 y
  • Python:我不明白 sum() 的完整用法

    当然 我明白你使用 sum 与几个数字 然后它总结所有 但我正在查看它的文档 我发现了这一点 sum iterable start 第二个参数 start 的作用是什么 这太尴尬了 但我似乎无法通过谷歌找到任何示例 并且对于尝试学习该语言的
  • Werkzeug 中的线程和本地代理。用法

    首先 我想确保我正确理解了功能的分配 分配本地代理功能以通过线程内的模块 包 共享变量 对象 我对吗 其次 用法对我来说仍然不清楚 也许是因为我误解了作业 我用烧瓶 如果我有两个 或更多 模块 A B 我想将对象C从模块A导入到模块B 但我
  • 在 Spyder 的变量资源管理器中查看局部变量

    我是 python 新手 正在使用 Spyder 的 IDE 我欣赏它的一项功能是它的变量资源管理器 然而 根据一些研究 我发现它只显示全局变量 我找到的解决方法是使用检查模块 import inspect local vars def m
  • 从 python 检测 macOS 中的暗模式

    我正在编写一个 PyQt 应用程序 我必须添加一个补丁 以便在启用暗模式的 Macos 上可以读取字体 app QApplication Fix for the font colours on macos when running dark
  • PIL - 需要抖动,但限制调色板会导致问题

    我是 Python 新手 正在尝试使用 PIL 来执行 Arduino 项目所需的解析任务 这个问题涉及到Image convert 方法以及调色板 抖动等选项 我有一些硬件能够一次仅显示 16 种颜色的图像 但它们可以指定为 RGB 三元
  • 字符串列表,获取n个元素的公共子串,Python

    我的问题可能类似于this https stackoverflow com questions 37514193 count the number of occurrences of n length not given string in
  • OSX 上的 locale.getlocale() 问题

    我需要获取系统区域设置来执行许多操作 最终我想使用 gettext 翻译我的应用程序 我打算在 Linux 和 OSX 上分发它 但我在 OSX Snow Leopard 上遇到了问题 python Python 2 5 2 r252 60
  • 导入错误:无法导入名称“时间戳”

    我使用以下代码在 python 3 6 3 中成功安装了 ggplot conda install c conda forge ggplot 但是当我使用下面的代码将其导入笔记本时 出现错误 from ggplot import Impor
  • bs4 `next_sibling` VS `find_next_sibling`

    我在使用时遇到困难next sibling 并且类似地与next element 如果用作属性 我不会得到任何返回 但如果用作find next sibling or find next 然后就可以了 来自doc https www cru
  • 操作错误:(sqlite3.OperationalError) SQL 变量太多,同时将 SQL 与数据帧一起使用

    我有一个熊猫数据框 如下所示 activity User Id 0 VIEWED MOVIE 158d292ec18a49 1 VIEWED MOVIE 158d292ec18a49 2 VIEWED MOVIE 158d292ec18a4

随机推荐

  • 在 DDD 中,实体和存储库可以从多个表中提取数据吗?

    我对 DDD 很陌生 我正在尝试正确实现我的用例 我有多个实体 它们都捆绑在一起 就像通常的聚合示例一样Order其中封装了LineItem 根据我对基本 DDD 的理解 我倾向于创建 2 个实体 一个用于订单 另一个用于行项目 但似乎有
  • 是否有关于 IL 反汇编器图标的描述

    我正在使用 MS IL 反汇编程序 它可以让您查看 Net 程序集的内容 类和接口显示在树视图中 用颜色和图标很好地编码 猜测大多数图标的含义相当容易 例如带有大写 I 的蓝色图标是一个界面 带有 E 的灰色图标是一个枚举 但有些项目 特别
  • 使用 interp 推断数据无法生成准确的图像

    我有一个图表 其中外推法与初始插值法不匹配 我希望热图填充整个图像 一 插值代码 library akima library reshape2 xmin lt signif min CBLo2 MD1 xmax lt signif max
  • phpmailer:仅使用“回复”地址回复

    我在我的网站上使用 phpmailer 为了帮助解决垃圾邮件问题 我创建了一个邮箱来发送这些电子邮件 使用 SMTP 我已设置要发送的电子邮件from邮箱地址 然后我添加了一个reply to我想要回复的地址 mail new PHPMai
  • 两个重载函数相似如何更好的设计

    我正在开发一个 C 项目 我有一个案例如下 void func int a int b if some bool generateString generateFunc different for auto it myVector do s
  • java.nio.file.InvalidPathException:格式错误的输入或使用国家字符时输入包含无法映射的字符

    我正在尝试创建一些具有国家符号 如 等 的目录 不幸的是 每当尝试这样做时 我都会遇到此异常 java nio file InvalidPathException Malformed input or input contains unma
  • JQuery 垂直无限轮播

    我过去两个小时一直在寻找 是否有任何 jQuery 插件可以实现垂直无限轮播效果 更具体地说 这是所需的布局 不幸的是 我现在确实没有经验 也没有时间学习 以便通过纯粹的创作来实现这一目标 即使只是为我指明正确的方向也会很棒 非常感谢任何帮
  • 是否有 MSBuild 任务会将行写入文件的 *start* ?

    我正在使用 WriteLinesToFile 来更新更改日志文件 txt 它将文本附加到文件末尾 理想情况下 我希望能够将更改写入start该文件的 是否有一个简单的任务 例如在社区或扩展包中 可以执行此操作 我在自定义任务包中没有看到类似
  • 有没有办法判断 ES6 Promise 是否已履行/拒绝/解决? [复制]

    这个问题在这里已经有答案了 我习惯了 Dojo Promise 我可以执行以下操作 promise isFulfilled promise isResolved promise isRejected 有没有办法确定 ES6 Promise
  • 如何创建一个运算符来实现错误链?

    我想实现以下运算符 throwingFunction arg T doStuff if throwingFunction throws an error print or log the error else returns an obje
  • RecyclerView 与 ListView

    来自 Android 开发者 创建列表和卡片 http developer android com training material lists cards html RecyclerView 小部件是更高级 更灵活的版本 列表显示 好吧
  • 单击 wpf 中的按钮时播放 wav 声音

    我想在整个应用程序中通过按钮单击事件的单击事件来播放声音 我发现 1 个代码在单击按钮时播放声音 private void btn Click object sender RoutedEventArgs e MediaPlayer mpla
  • Java 中的 LRU 缓存,具有泛型和 O(1) 操作

    这是求职面试中经常出现的问题 这个想法是定义一个数据结构而不是使用Java内置的LinkedHashMap LRU 缓存会删除最近最少使用条目插入一个新条目 因此 考虑到以下场景 A B C D E 其中 A 是最近最少使用的项目 如果我们
  • 为什么谷歌浏览器提示“选择一个证书来验证自己的身份”

    我有一个应用程序在 Tomcat 服务器中运行 该服务器位于具有正确证书的 NginX 后面 当我尝试在 Mac OS X 中使用 Chrome 访问此应用程序时 浏览器中会弹出 选择一个证书来验证您自己的身份 我想避免这种情况 为此 我需
  • 如何使用 javascript 从字符串中删除 ¶

    这个问题在这里已经有答案了 我正在使用 diff api 工具创建一个很好的 diff 来显示更改的文本 我正在使用谷歌差异工具 https code google com archive p google diff match patch
  • 如何创建一个简单的基本单例?

    我的目的是创建一个单例 但不知道如何在 Rust 中处理这个 我读过this https stackoverflow com questions 27791532 how do i create a global mutable singl
  • Google 日历 API 400 响应

    我正在尝试在 Google Calendar API 上执行简单的忙闲查询 我的授权一切正常 可以查看用户日历列表等 当我尝试提交忙 闲查询时 我收到 400 错误 据我所知 根本没有关于它的详细信息不喜欢 无论是在我自己的代码中还是在我使
  • 我想使用 nlohmann:json 解析带有 msgpack 数据的 boost::beast::flat_buffer

    所以我使用 boost beast 作为 WebSocket 服务器 我想接收二进制消息并使用 nlohmann json 解析它 但是我收到一条错误消息 3 个重载都不能转换参数 nlohmann detail input adapter
  • 为什么aspnet_users使用guid作为id而不是递增int?帮助扩展用户领域的奖励积分

    为什么aspnet users使用guid作为id而不是递增int 还有什么理由不在其他表中使用它作为主键 这感觉有点奇怪 因为我知道我过去使用过的大多数应用程序都只使用普通的 int 系统 我也即将开始使用这个 id 来匹配额外的用户首选
  • 在不使用模型的情况下在球流中进行选择性索引

    我正在将bulbflow python 与Neo4j一起使用 并且我正在尝试添加索引only在我的键的子集上 目前 只是名为 name 的键 用于可选的基于索引的查找 我不喜欢球流模型 限制太多 并且我无法弄清楚如何在不更改代码的情况下进行