Optimization 优化neo4j-lucene指数

Optimization 优化neo4j-lucene指数,optimization,indexing,lucene,neo4j,full-text-search,Optimization,Indexing,Lucene,Neo4j,Full Text Search,我在Neo4j数据库中设置了全文自动索引 要清楚的是,在这种情况下,Neo4j总是使用Lucene进行索引。 目前我有大约2000万个节点,这可能很快会增加到4000多万个节点 对于大多数查询,性能都很好,几乎是即时的,但有时查询 "*term*" 最多需要20秒才能返回 你能分享一些优化Neo4j和Lucene以实现更快全文搜索的技巧吗?也许我应该修改一些缓存属性 基本配置在文档中有很好的解释,但是很难找到任何关于如何在Neo4j中配置和/或改变Lucene行为的书面指南。我认为你的主要问

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

要清楚的是,在这种情况下,Neo4j总是使用Lucene进行索引。 目前我有大约2000万个节点,这可能很快会增加到4000多万个节点

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

"*term*" 
最多需要20秒才能返回

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


基本配置在文档中有很好的解释,但是很难找到任何关于如何在Neo4j中配置和/或改变Lucene行为的书面指南。

我认为你的主要问题是你在那里使用了领先的通配符

如果您只是在寻找一个简单的术语,那么您可能希望从文档中提取术语,并通过该术语将它们链接到单独的节点,这样您就可以利用图形连接来访问包含术语的文档

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

您可能希望对文档进行标记化并提取这些关键术语,以便最终得到如下结果:

(d:Document)-[:contains]->(t:Term { term: "foo" });
然后,当您想知道哪些文档中有“foo”时,您不再使用Lucene,但是:

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

MATCH(t:Term{Term:foo})也许您可以共享您的数据模型和查询/代码?