【问题标题】:Neo4j Cypher chain output from match query to APOC从匹配查询到 APOC 的 Neo4j Cypher 链输出
【发布时间】:2018-04-26 17:37:32
【问题描述】:

我想使用 Neo4j Cypher apoc.index.search 程序。我目前正在使用 Neo4j CE 3.1.0。我已成功设置并测试了该过程作为独立查询,例如:

call apoc.index.search("Contact2", "Contact2.FirstName:monica~")

现在,我想先执行MATCH 查询以获取一组节点,然后将找到的FirstNames 假脱机以在Contact2 节点上调用此APOC 过程,看看是否可以在@ 中找到任何类似的987654326@节点和对应的权重。

这可能吗?我使用WITH 关键字尝试了几次迭代,但无济于事。谢谢。

【问题讨论】:

    标签: neo4j cypher neo4j-apoc


    【解决方案1】:

    您可以将每个firstName 值作为单独的模糊搜索词添加到传递给apoc.index.search 的查询字符串中。例如:

    MATCH (f:Foo)
    WITH REDUCE(
        s = 'Contact2.FirstName:', n IN COLLECT(DISTINCT f.firstName) |
        s + n + '~ '
      ) AS query
    CALL apoc.index.search("Contact2", query)
    ...
    

    【讨论】:

    • 我已经测试了您的代码并且效果很好。我同意您在下面发表的评论,您的评论将生成一个很长的查询字符串,并且可能无法在大型数据库中使用。关于仅检查 FirstName,这只是一个用于确认 apoc 过程的测试脚本。我将进行调整以使查询字符串数据更加独特 - 但会记下您的 WITH DISTINCT 声明。谢谢。
    【解决方案2】:

    @cybersam 谢谢你的回答。我没有尝试你的,但我也只是自己解决了这个问题(经过几天的尝试)。我的语法如下:

    // Contact1 是我的源表。 Contact2 是我的目标表

    MATCH (a:Contact1) WITH a.FirstName AS A 
    CALL apoc.index.search("Contact2", "Contact2.FirstName:" + A + "~") 
    YIELD node, weight RETURN *
    

    我不确定这是否是最好的方法,但它对我有用

    【讨论】:

    • 您的方法使N 调用apoc.index.search (其中N 是FirstName 值的数量),这将比进行单个调用要慢(这是我的查询所做的——虽然我的查询可能会以一个极长的查询字符串结束,这可能会导致问题)。此外,您的查询应该使用WITH DISTINCT a.FirstName AS A,因为可能很多人可以有相同的名字,并且没有理由多次执行相同的搜索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多