Indexing 字符串中单词的架构索引

Indexing 字符串中单词的架构索引,indexing,neo4j,lucene,Indexing,Neo4j,Lucene,我有大量的节点,它们的属性text包含一个字符串 我想找到文本包含给定字符串(精确匹配)的所有节点。这可以使用CONTAINS操作符完成 MATCH (n) WHERE n.text CONTAINS 'keyword' RETURN n 编辑:我正在查找所有节点n,其中n.text包含子字符串“关键字”。例如,n.text='这是一个关键字' 为了加快速度,我想为每个单词创建一个索引。这是否可能使用新的 (或者,可以使用一个索引并将每个节点添加到此索引中,但我更喜欢使用模式索引)绝对如此。如

我有大量的节点,它们的属性
text
包含一个字符串

我想找到文本包含给定字符串(精确匹配)的所有节点。这可以使用
CONTAINS
操作符完成

MATCH (n)
WHERE n.text CONTAINS 'keyword'
RETURN n
编辑:我正在查找所有节点n,其中n.text包含子字符串“关键字”。例如,
n.text='这是一个关键字'

为了加快速度,我想为每个单词创建一个索引。这是否可能使用新的


(或者,可以使用一个索引并将每个节点添加到此索引中,但我更喜欢使用模式索引)

绝对如此。如果您正在寻找一个精确的匹配项,那么可以使用模式索引。从您的问题判断,您可能知道这一点,但要创建索引,您需要为节点分配一个标签,然后在该标签上创建索引

CREATE INDEX ON :MyLabel(text)
然后在查询时,cypher执行索引将自动将此索引用于以下查询

MATCH (n:MyLabel { text : 'keyword' })
RETURN n
这将使用架构索引查找带有标签
MyLabel
的节点和带有值
关键字
的属性
text
。请注意,这与属性的完整值完全匹配

要强制Neo4j使用特定索引,可以使用

编辑

在重新阅读您的问题时,我认为您实际上并不是在寻找完全精确的匹配,而是希望在
文本
字段中的
关键字
参数上找到精确匹配。如果是这样,那么……不,您还不能使用模式索引。Neo4j手册中的引用:

类似的运算符以结尾,当前无法使用索引解决


如果我正确理解了您的问题,遗留索引将完全完成您希望完成的任务。如果不想维护创建/删除/更新的每个节点的索引,可以使用自动索引()


如果您希望只使用模式索引,另一种方法是将每个关键字存储为单独的节点。然后,您可以使用模式索引来查找相关的关键字节点,然后将这些关键字节点映射到它们所在的节点。只是想一想。

谢谢。CONTAINS通过与旧索引一起工作吗?旧索引可以配置为“全文”,因此理论上不需要
CONTAINS
子句。然而,我已经有一段时间没有使用遗留索引了,但在理论上,它允许在索引查找中进行精确但部分的匹配。
MATCH (n:MyLabel)
USING INDEX n:MyLabel(text)
WHERE n.text = 'keyword'
RETURN n