高级查询的搜索短语

正如 搜索短语 中所述,搜索短语允许您保存预定义的图查询。搜索短语在“透视图”(Perspective) 抽屉中定义,并在创建时自动保存。您保存的搜索短语也可以从“透视图”抽屉中访问。

静态搜索短语

static search phrase

在这个使用 Northwind 图的示例中,保存了一个静态搜索短语,其中包含跨越多个节点和关系的 Cypher 查询。第一个标题为 Search phrase 的框指定了用户将部分或全部输入的短语。描述会显示在展示给用户的所有匹配搜索短语下方。

Bloom 将以不区分大小写的方式匹配“搜索短语”字段的任何部分。例如,输入 germORDERSeaFoo 都将显示 Germans ordering Seafood 的匹配项。

动态搜索短语

parameterized search phrase

可以在搜索短语中使用参数,使其成为动态的。在此使用 Northwind 图的示例中,搜索短语中添加了 2 个参数(前面用 $ 符号表示)。这些参数允许通过用户输入来确定应该运行哪个查询。这些参数有三种建议选项可供选择:

  • 无建议 (No suggestions) - 如果选中,则在使用搜索短语时不会显示建议列表。

  • 标签-键 (Label-key) - 允许为建议列表选择标签:键 (label:key) 对。

  • Cypher 查询 (Cypher query) - 为建议列表编写自定义 Cypher 查询。

参数数据类型

必须为每个参数指定数据类型。Bloom 支持 string(字符串)、integer(整数)、float(浮点数)和 boolean(布尔值)数据类型。此外,Bloom 还支持时间类型 DateTimeDateTimeLocalDateLocalDateTime。带有时区的时间类型(即 TimeDateTime)也可用于基于规则的样式设置或过滤器。您可以搜索它们并获取搜索建议,还可以在检查器 (Inspector) 中编辑它们(前提是您拥有对该图的写入权限)。

参数的用户输入会被转换为为其指定的数据类型。

如果您想为 Cypher 支持的其他数据类型设置参数,可以使用 stringintegerfloatboolean 输入的组合来构建 Cypher 的其他数据类型。请参阅 Cypher 手册 → 值和类型 以获取有关数据类型的更多信息。

下面描述了几个场景,但您可能还会遇到许多其他场景。

  • 时间(日期或时间)类型:当您有时间属性时,可以将 DateTimeDateTimeLocalDateLocalDateTime Cypher 函数与字符串参数一起使用。例如:

    MATCH (n:Employee) where n.startDate = date($inDate)
    return n

    其中 $inDate 将是一个类似 2019-05-23string 输入。

  • 空间类型:对于空间属性,可以在搜索短语中将 point 或 distance Cypher 函数与浮点参数一起使用。例如:

    MATCH (n:Store) where n.location = point({latitude:$lat, longitude:$long})
    return n

    其中 $lat$long 将是类似 37.55-122.31float 输入。

参数链式调用

一个参数的用户输入可用于过滤后续参数提供的建议列表。这被称为参数链式调用 (parameter chaining)。例如,考虑上面使用多个参数的搜索短语:Customers from $country ordering $category。在这种情况下,如果您想根据用户选择的国家/地区限制类别建议列表,参数链式调用将帮助您实现这一目标。要使用它,类别建议列表需要使用包含 $country 参数来过滤类别的 Cypher 查询来构建。请参阅下图以了解其可能的样子。

parameter chaining

搜索短语注意事项

  • Bloom 会将可视化处理的记录数限制为 10,000 条,除非查询中设置了更小的限制。这是为了防止应用程序因返回过多记录的查询而挂起或崩溃。

    query limit
  • 建议搜索短语返回路径或一组节点。

    仅返回关系可能会导致意外行为,且图可视化不会发生变化。

    例如,以下查询:

    MATCH ()-[r:CONNECTED_TO]->() RETURN r

    应重构为:

    MATCH p = ()-[r:CONNECTED_TO]->() RETURN p
  • 此外,请注意,使用搜索短语修改数据是可能的,因为可以使用任何有效的 Cypher 查询。不建议将搜索短语用于此目的,因为最终用户可能不知道运行包含写入 (WRITE) 事务的搜索短语所带来的后果。

  • 搜索短语中的 Cypher 查询可以作为读取 (READ) 或写入 (WRITE) 事务发送到数据库(前提是您拥有相应的权限)。为了将其作为写入事务发送,您需要首先在 设置 抽屉中启用此功能。Bloom 可以根据多个关键字检测某些写入查询,如果您的查询不包含任何这些关键字,则需要勾选“写入事务 (Write transaction)”框,以便将该事务作为写入操作发送。如果勾选了“写入事务”框,则该查询始终作为写入事务发送。

write transaction