【问题标题】:Searching nodes and properties of nodes搜索节点和节点属性
【发布时间】:2015-09-25 00:39:16
【问题描述】:

我正在尝试为使用 Neo4j 作为数据库的聚会应用程序创建搜索功能。有没有办法同时搜索节点(主题、部门和标题,获取附加到它们的人)和节点的属性(名字、姓氏、用户名、简历)。

Person 节点与 Title 节点有关系(通过 IS_TITLED),与 Department 节点有关系(通过 EMPLOYED_BY),与 Topic 节点有关系(通过 INTEREST_OF 或 SKILL_OF)

另外我想确保每个人的结果都是不同的,所以如果这个人输入一个人和一个部门的标题并且得到 2 个匹配项,那么这个人只会返回一次。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    您的问题非常广泛,但这里有一个示例查询:

    • 查找所有受雇于财务部门并具有“文员”头衔的人员。
    • 确保他们是不同的人。
    • 返回他们的名字、姓氏、用户名和简历。

    MATCH (d:Department)<-[:EMPLOYED_BY]-(p:Person)-[:IS_TITLED]->(t:Title)
    WHERE d.name = "Finance" AND t.name = "Clerk"
    WITH DISTINCT p
    RETURN p.fname AS firstname, p.lname AS lastname, p.username AS username, p.bio AS bio;
    

    【讨论】:

    • 对不起它的广泛性。基本上我需要一个搜索来分解人们在搜索栏中输入的内容并搜索多个节点和节点属性并返回结果。
    • 这本质上是要求一个完整的应用程序,这对于 * 问题来说确实太宽泛了。
    【解决方案2】:

    实际上,我并不是在寻找整个应用程序。我的最终解决方案是在添加、更新和删除节点时在 ElasticSearch 中添加、更新和删除文档。然后我使用 ElasticSearch 查找结果并返回节点 ID 列表。然后我编写了我的 Cypher 查询以使用 IN 为返回的 id 提取信息以产生结果。它似乎工作得很好。由于我找不到用于同步 Neo4j 和 ElasticSearch 的集成解决方案,因此我在我的应用程序中使用这两个库,并在节点受到影响时对 ElasticSearch 执行适当的操作。

    【讨论】: