我有一个带有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表明索引不适用于正则表达式匹配。
加快第一个查询的方法是什么?
答案 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上发布问题。