2015-04-14 102 views
1

我在我的Neo4j数据库中设置了全文autoindex。优化neo4j lucene索引

需要明确的是,在这种情况下,Neo4j的总是使用Lucene做索引。 目前我有大约2000万个节点,可能很快就会增加到超过4000万个节点。

对于大多数的查询性能优良,几乎是一瞬间,但有时候查询,如

"*term*" 

需要20秒返回。

你能分享优化的Neo4j和Lucene执行更快的全文搜索的一些技巧?也许我应该修改一些缓存属性?

的基本配置在Docs是很好的解释,但任何有关如何配置和/或改变Lucene的内部Neo4j的行为有点写得很好,导游都很难找到。

+0

也许你可以分享你的数据模型和查询/代码? –

回答

1

我认为你的主要问题是,您使用的是领先的通配符那里。 See other answers about lucene performance in general on leading wildcards

如果你只是寻找一个简单的名词,你可能希望从文档中提取术语和由该术语并将其链接到不同的节点,这样就可以利用图形连接,以获得含有一个词的文档。

无论您如何构建索引,此查询“term”必须查看数据库中每个字符串的每个可能的子字符串,这需要很长时间。

你可能想看看标化您的文件和提取这些关键条款,让你到底有没有这样的事情:

(d:Document)-[:contains]->(t:Term { term: "foo" }); 

然后,当你想知道哪些文件具有“富”在其中,你不这样做Lucene的了,但这样的:

MATCH (t:Term {term: "foo"})<-[:contains]-(d:Document) 
RETURN d; 

我希望这将是很多很多,更快但需要你做的前端,术语提取。它也将工作多为简单的术语,而不是像查询[富2 O 2 O 2条]