neo4j 2是否支持通过索引进行正则表达式查找?

时间:2014-04-29 06:51:39

标签: neo4j

我们在已创建索引的标记节点上有很多neo4j查询,如下所示:

MATCH (entity:ARTICLE) WHERE entity.ARTICLE_ORDER_NR=~"0.*" RETURN count(DISTINCT entity);

随着数据库的增加,这会变得很慢,从配置文件中看,这并不是很奇怪,因为它没有使用任何索引:

ColumnFilter(symKeys=["  INTERNAL_AGGREGATEcd3c62e9-a90c-477a-bd5e-01741eed6ffc"], returnItemNames=["count(DISTINCT entity)"], _rows=1, _db_hits=0)
EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATEcd3c62e9-a90c-477a-bd5e-01741eed6ffc,Distinct(Count(entity),entity))"], _rows=1, _db_hits=0)
  Filter(pred="LiteralRegularExpression(Property(entity,ARTICLE_ORDER_NR(221)),Literal(0.*))", _rows=19096, _db_hits=89768)
    NodeByLabel(identifier="entity", _db_hits=0, _rows=89768, label="ARTICLE", identifiers=["entity"], producer="NodeByLabel")

它使用标签遍历每个节点。

尽管完全匹配使用我们创建的索引:

 MATCH (entity:ARTICLE ) WHERE entity.ARTICLE_ORDER_NR="0" RETURN count(DISTINCT entity);

资料:

ColumnFilter(symKeys=["  INTERNAL_AGGREGATEae04c897-ae93-440c-8a36-3126394ccc83"], returnItemNames=["count(DISTINCT entity)"], _rows=1, _db_hits=0)
EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATEae04c897-ae93-440c-8a36-3126394ccc83,Distinct(Count(entity),entity))"], _rows=1, _db_hits=0)
  SchemaIndex(identifier="entity", _db_hits=0, _rows=677, label="ARTICLE", query="Literal(0)", identifiers=["entity"], property="ARTICLE_ORDER_NR", producer="SchemaIndex")

所以我的猜测是正则表达式不支持索引查找。

我的问题是双重的

  • neo4j是否会通过附近的索引支持这样的regexp查找 未来?
  • 我们可以用什么方法来加快速度吗?

1 个答案:

答案 0 :(得分:1)

全文索引肯定在路线图上,是的。缺少此功能是遗留索引尚未弃用的少数几个原因之一。它不属于2.0版本的主要原因是全文查找需要新的cypher语义(类似于SQL中的LIKE关键字的构造),我们希望花时间仔细设计以使其正确。

那就是说,我无法估计何时会出现这种情况,我建议您暂时使用旧索引进行全文索引。