【问题标题】:Trying to make my Cypher Statement case insensitive试图让我的密码语句不区分大小写
【发布时间】:2020-02-26 22:53:56
【问题描述】:

我有一个正在处理 neo4j 存储库的密码查询,我想让这个查询不区分大小写。

尝试使用=~,但这不起作用。

@Query (countQuery = "match (n:Patient) where n.born = {0} OR n.lastName = {0} OR n.email = {0} return n") Page<Patient> findByLastNameOrBornOrEmail(String lastName, String born, String email, Pageable pageable);

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    单独的=~ 是行不通的,你需要像这样在字符串前面加上(?i)

    WHERE n.lastname =~ '(?i)' + {0}
    

    请注意,在执行这样的查找时不能使用索引,规划器需要对所有 :Patient 节点进行标签扫描,随着 :Patient 节点的增加,性能会降低。

    如果您使用的是 Neo4j 3.5.x,您可能需要考虑使用 fulltext schema indexes,它可以涵盖节点的多个属性(而不是单个属性),这将非常适合您的情况,并且是不区分大小写。不过,您可能需要弄清楚在哪里进行分数截断,才能获得相关结果。

    【讨论】:

    • 首先感谢您的回答,它的工作原理是这样的。我在我的应用程序中使用分页,我让用户有机会选择每页 1 到 20 个条目。您是否仍然认为此解决方案会使我的应用程序性能降低?问题是,分页会加载所有条目并在请求之后渲染它们还是只加载用户选择的条目?
    • 对于分页,您通常需要排序,我在查询中没有看到 ORDER BY。查询必须找到结果,跳过您在此处定义的任何内容,然后将 LIMIT 应用于返回的结果。请注意,当返回节点或关系时,这些节点的属性不会被访问(因此它们可以返回给调用者),除非它们实际上被返回,因此由于 SKIP 而被跳过的节点,或者在有限的返回集之外,不会访问他们的属性。
    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多