用neo4j加快搜索速度

时间:2014-07-11 14:36:28

标签: ruby-on-rails neo4j cypher

我有一个带有ruby on rails的嵌入式neo4j服务器。

这些是配置:

neostore.nodestore.db.mapped_memory=25M
neostore.relationshipstore.db.mapped_memory=240M
neostore.propertystore.db.mapped_memory=230M
neostore.propertystore.db.strings.mapped_memory=1200M
neostore.propertystore.db.arrays.mapped_memory=130M

wrapper.java.initmemory=1024
wrapper.java.maxmemory=2048

数据库中有大约15个星期五的节点。

Movie节点有一个属性lowercase_indexed_name,该属性已编入索引并且是属性name的小写,用于处理带索引的区分大小写的问题。

以下是执行自动填充搜索的以下查询所花费的时间..

1

MATCH (movie:Movie)
WHERE movie.lowercase_indexed_name =~ 'SEARCH_STRING_IN_LOWER_CASE.*'
RETURN movie

需要2500毫秒。

2

MATCH (movie:Movie)
WHERE movie.name =~ 'SEARCH_STRING_IN_PROPER_CASE.*'
RETURN movie

也需要2500毫秒。

3

MATCH (movie:Movie)
WHERE movie.lowercase_indexed_name = 'EXACT_STRING_IN_LOWER_CASE'
RETURN movie

需要84毫秒。

查看查询1和2表明索引不适用于正则表达式匹配。

加快第一个查询的方法是什么?

2 个答案:

答案 0 :(得分:1)

确切地说,全文搜索没有架构索引。

您可以使用旧版全文索引,请参阅我的博文:http://jexp.de/blog/2014/03/full-text-indexing-fts-in-neo4j-2-0/

答案 1 :(得分:1)

我已经在Neo4j.rb项目中使用Searchkick gem来处理全文搜索。最近对github上gem的提交提供了与Searchkick的兼容性,只需确保您使用IdProperty系统即可。如果您需要提及任何问题,可以在https://github.com/neo4jrb/neo4j上发布问题。