高级查询搜索短语

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

静态搜索短语

static search phrase

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

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

动态搜索短语

parameterized search phrase

可以在搜索短语中使用参数使其动态化。在此使用 Northwind 图的示例中,搜索短语中添加了 2 个参数(前面带有“$”符号)。这些允许进一步的用户输入来确定应运行哪个查询。有三个选项可用于这些参数的建议

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

  • 标签-键 - 允许为建议列表选择标签:键对。

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

参数数据类型

必须指定每个参数的数据类型。Bloom 支持stringintegerfloatboolean数据类型。此外,Bloom 还支持时间类型DateTimeDateTimeLocalDateLocalDateTime。带有时区的时间类型,即TimeDateTime,也可以用于基于规则的样式或过滤器。您可以搜索它们并获取搜索建议,也可以在检查器中编辑它们(前提是您对图具有写入访问权限)。

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

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

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

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

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

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

  • 空间类型:对于空间属性,您可以在搜索短语中使用点或距离 Cypher 函数以及浮点参数。例如

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

    其中$lat$long将具有类似于37.55-122.31float输入。

参数链接

一个参数的用户输入可用于筛选为后续参数提供的建议列表。这称为参数链接。例如,考虑上面使用的带有多个参数的搜索短语“来自$country的客户订购$category”。在这种情况下,您可能希望根据用户选择的国家/地区限制类别建议列表,参数链接将帮助您实现此目的。要使用它,类别建议列表将需要使用使用$country参数筛选类别的 Cypher 查询来构建。有关此示例的外观,请参见下图。

parameter chaining

搜索短语注意事项

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

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

    仅返回关系可能会导致意外行为以及没有图可视化更改。

    例如,以下查询

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

    应重构为

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

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

write transaction