【发布时间】:2015-08-02 09:26:40
【问题描述】:
这个问题在 neo4j-legacy-indexes-and-auto-index-vs-new-label-bases-schema-indexes 和 the-difference-between-legacy-indexing-auto-indexing-and-the-new-indexing-approach
我还不能对它们发表评论并在这里写一个新线程。 在我的数据库中,我有一个旧索引“主题”和标签“主题”。
我知道:
- 一个。 pattern MATCH (n:Label) 将扫描节点;
- 乙。模式 START (n:Index) 将搜索旧索引
- c。 auto-index 是一种遗留索引,应该给出与 (b) 相同的结果,但在我的情况下不是
- d. START 子句应替换为 MATCH 以表示“良好做法”。
a 之间的结果不一致。和 b。 (见下文),无法弄清楚如何使用 MATCH 的正确语法来搜索标签的索引。
这里有一些例子:
1#
start n=node:topic('name:(keyword1 AND keyword2)') return n
6 行,3 毫秒
start n=node:node_auto_index('name:(keyword1 AND keyword2)') return n;
0 行
MATCH (n:Topic) where n.name =~ '(?i).*keyword1*.AND.*keyword2*.' return n;
0 行,10K 毫秒
2#
start n=node:topic('name:(keyword1)') return n
212 行,122 毫秒 [所有包含子字符串关键字 1 的连贯结果]
start n=node:node_auto_index('name:(keyword1)') return n
0 行
MATCH (n:Topic) where n.name =~ '(?i).*keyword1*.'return n
835 行,8K ms [结果也不一致,包含子字符串 eyword]
MATCH (n:Topic) where n.name =~ 'keyword1' return n;
1 行,>6K ms [精确匹配]
MATCH (n:topic) where n.name =~ 'keyword1' return n;
没有结果(这里我使用了索引“主题”而不是标签“主题”!)
MATCH (node:topic) where node.name =~ 'keyword1' return node;
没有结果(尝试直接使用节点“对象”,如自动索引语法)
你能帮忙解释一下吗:
旧索引和自动索引有什么区别,为什么两者之间的结果不一致?
如何将 MATCH 子句与索引而不是标签一起使用? 我想重现全文搜索的结果。
哪种语法只应用于节点的邻居而不是完整数据库?匹配 ? START 子句?遗留索引?标签?我很困惑。
【问题讨论】:
-
你的正则表达式语法也是错误的,这应该可以工作 '(?i).*(keyword1|keyword2){2}.*'
-
:Topic是一个标签,它与手动/旧索引完全不同,它们根本不可交换。 -
在正则表达式中:零个或多个是
.*而不是*.!!!所以这个(?i).*keyword1*.'必须是 (?i).*keyword1.*'
标签: neo4j lucene full-text-search label full-text-indexing