首页 > 解决方案 > Neo4j - 如何在全文搜索中使用 createRelationshipIndex / createNodeIndex

问题描述

所以我知道 Neo4j 3.5 及更高版本通过 实现密码查询中的全文搜索createNodeIndex(),例如:

CALL db.index.fulltext.createNodeIndex("myIndex", ["PersonNode"], ["name"])

wheremyIndex是我用来存储索引的任意变量,PersonNode是我的节点标签的名称,并且是我希望执行全文搜索name的属性之一。PersonNode

要实际执行搜索name,我可以执行以下操作:

CALL db.index.fulltext.queryNodes("myIndex", "Charlie")

但现在假设PersonNode有一个 type 的关系PURCHASED_ITEM,它连接到另一个节点标签ProductNode如下:

PersonNode-[:PURCHASED_ITEM]->ProductNode

并进一步假设有一个名为指示每个产品的显示标题名称ProductNode的属性。productTitle

我的问题是,我想为这种关系建立一个索引(大概使用createRelationshipIndex()),并执行全文搜索productTitle并返回所有PersonNode购买给定产品的列表。我怎样才能做到这一点?

附录:我知道可以通过首先获取ProductNode与给定标题匹配的所有实例的列表,然后执行正常的密码查询以提取所有相关PersonNode实例来完成上述操作。我也明白,对于上面的例子,我只需要一个普通的密码查询。但我问这个问题的原因是我最终需要实现一个搜索栏,允许用户输入任何文本,包括可能的拼写错误和所有,并让它通过多个属性和/或关系执行搜索PersonNode,并且结果需要按某种相关性分数进行排序。为了做到这一点,我觉得我需要首先准确地掌握关系查询在 neo4j 中是如何工作的。

标签: databaseneo4jcypher

解决方案


productTitle下面是一个如何为关系属性创建全文索引的示例PURCHASED_ITEM

CALL db.index.fulltext.createRelationshipIndex("myRelIndex", ["PURCHASED_ITEM"], ["productTitle"])

这是一个显示该索引使用的片段:

CALL db.index.fulltext.queryRelationships("myRelIndex", "Hula Hoop") YIELD relationship, score
...

推荐阅读