优化neo4j lucene指数

时间:2015-04-14 15:25:46

标签: optimization indexing lucene neo4j full-text-search

我在Neo4j数据库中设置了全文自动索引。

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

对于大多数查询,性能很好,几乎是即时的,但有时候会像

那样查询
"*term*" 

最多需要20秒才能返回。

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

基本配置在文档中得到了很好的解释,但很难找到任何关于如何配置和/或改变Lucene在Neo4j中的行为的精心编写的指南。

1 个答案:

答案 0 :(得分:1)

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

如果您只是在寻找一个简单的术语,您可能希望从文档中提取术语并将它们链接到该术语的单独节点,以便您可以利用图形连接来获取包含术语的文档。

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

您可能需要查看对文档进行标记并提取这些关键术语,以便最终得到类似的内容:

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

然后,当你想知道哪些文件中有“foo”时,你不再做Lucene,但是这个:

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

我希望这会更快,更快,但需要你在前端进行术语提取。它也主要用于简单的术语,而不是像[foo?o?o?bar]

这样的查询