【问题标题】:Searching properties in neo4j queries在 neo4j 查询中搜索属性
【发布时间】:2018-09-10 16:38:34
【问题描述】:

有一个节点 Person 由 2 个属性组成:firstName、lastName。用户可以输入名字或姓氏或两者。如果同时指定了两个名称,则不能保证名称的顺序是 firstName 和 lastName 。例如:如果名字是sherlock holmes,用户可以给holmes sherlock或者只给sherlock或者holmes或者sherlock holmes。在所有这些情况下,我们都必须得到福尔摩斯节点。如果未指定输入,则返回所有 Person 节点。

我尝试了以下查询:

Match (n : Person )
where n.firstName+" "+n.lastName ={1} or n.lastName+" "+n.firstName={1}  
return n

其中 {1} 是名称。

谁能帮帮我!!

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    [更新两次]

    类似下面的东西应该可以工作。

    WITH SPLIT($name, ' ') AS parts
    WITH parts, SIZE(parts)=1 AS one_part
    MATCH (n: Person)
    WHERE
      parts IS NULL OR
      (n.firstName=parts[0] AND (one_part OR n.lastName=parts[1])) OR
      (n.lastName=parts[0] AND (one_part OR n.firstName=parts[1])) OR
      (parts[0] = '' AND NOT EXISTS(n.firstName) AND NOT EXISTS(n.lastName))
    RETURN n
    

    特殊情况:

    • 如果name参数为NULL,则返回所有Person节点。
    • 如果name 参数为空字符串,则此查询将匹配具有空字符串作为firstNamelastName 值的任何Person 节点,或者没有这些属性。

    【讨论】:

    • 感谢您的询问。该查询仅在给出某些名称输入时才有效,否则它不会返回任何节点。你也可以帮忙处理那个案子吗...
    • 如果未指定$name,您希望查询返回哪些节点?
    • 我已更新我的答案以支持具有空字符串值的 name 参数的特殊情况。这有帮助吗?使用参数的查询必须为该参数传递一个值——你不能忽略它。
    • 名称可能会或可能不会通过。如果未通过,则必须返回所有节点。
    • 必须传递name 参数,否则会出错。我假设你的意思是你可以通过null?请参阅我的更新答案。
    猜你喜欢
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多