【发布时间】:2016-04-17 03:45:09
【问题描述】:
我们使用的是 Neo4j Community Edition 2.3.1,并且有许多使用通配符的查询。例如,我们在几个较大的属性中搜索所有包含“汽车”一词的“用户”:个人资料和简历(即:句子或小段落)。
MATCH (user:User)
WHERE (user.Profile =~ '(?i).* cars .*') OR (user.Bio =~ '(?i).* cars .*')
RETURN user SKIP 0 LIMIT 20;
“用户”节点的数量超过 160 万。
查询相对较慢,尽管我们知道这一点,因为 Neo4j 使用 AllNodesScan,因为属性上没有索引。我们想为此查询创建一个索引,但 Neo4j 的“新”索引不适用于通配符。
我们正在考虑将“旧”全文 Neo4j 索引与 Lucene 一起使用。 还考虑将 Bio 和 Profile 制作成带标签的节点,而不是 Properties,然后在它们上使用 Schema 索引。
我担心实现“旧版”索引,因为它们是“旧版”,我正在考虑是否可以在某个时候弃用它们。
关于提高上述通配符搜索性能的建议?
【问题讨论】:
标签: performance indexing neo4j lucene cypher