优化 neo4j lucene 索引
Optimizing neo4j lucene index
我在我的 Neo4j 数据库中设置了全文自动索引。
需要说明的是,在这种情况下,Neo4j 始终使用 Lucene 来做索引。
我目前有大约 2000 万个节点,并且可能很快会增加到超过 4000 万个节点。
对于大多数查询,性能都很好,几乎是即时的,但有时像
这样的查询
"*term*"
最多需要 20 秒才能 return。
您能否分享一些有关优化 Neo4j 和 Lucene 以执行更快的全文搜索的技巧?也许我应该修改一些缓存属性?
基本配置在文档中有很好的解释,但是很难找到任何关于如何配置 and/or 改变 Lucene 在 Neo4j 中的行为的书面指南。
我认为您的主要问题是您在那里使用了前导通配符。 See other answers about lucene performance in general on leading wildcards.
如果您只是在寻找一个简单的术语,您可能希望从文档中提取术语并 link 它们以该术语分隔节点,这样您就可以利用图形连接来获取包含以下内容的文档一个条款。
无论您如何构建索引,此查询“term”都必须查看数据库中每个字符串的几乎每个可能的子字符串,这将花费好久了。
您可能想要研究标记化您的文档并提取这些关键术语,以便您最终得到如下结果:
(d:Document)-[:contains]->(t:Term { term: "foo" });
然后,当你想知道哪些文档里面有"foo"的时候,你就不用Lucene了,但是这个:
MATCH (t:Term {term: "foo"})<-[:contains]-(d:Document)
RETURN d;
我希望这会快很多很多,但需要您在前端进行该术语提取。它也主要适用于简单的术语,而不是像 [foo?o?o?bar]
这样的查询
我在我的 Neo4j 数据库中设置了全文自动索引。
需要说明的是,在这种情况下,Neo4j 始终使用 Lucene 来做索引。 我目前有大约 2000 万个节点,并且可能很快会增加到超过 4000 万个节点。
对于大多数查询,性能都很好,几乎是即时的,但有时像
这样的查询"*term*"
最多需要 20 秒才能 return。
您能否分享一些有关优化 Neo4j 和 Lucene 以执行更快的全文搜索的技巧?也许我应该修改一些缓存属性?
基本配置在文档中有很好的解释,但是很难找到任何关于如何配置 and/or 改变 Lucene 在 Neo4j 中的行为的书面指南。
我认为您的主要问题是您在那里使用了前导通配符。 See other answers about lucene performance in general on leading wildcards.
如果您只是在寻找一个简单的术语,您可能希望从文档中提取术语并 link 它们以该术语分隔节点,这样您就可以利用图形连接来获取包含以下内容的文档一个条款。
无论您如何构建索引,此查询“term”都必须查看数据库中每个字符串的几乎每个可能的子字符串,这将花费好久了。
您可能想要研究标记化您的文档并提取这些关键术语,以便您最终得到如下结果:
(d:Document)-[:contains]->(t:Term { term: "foo" });
然后,当你想知道哪些文档里面有"foo"的时候,你就不用Lucene了,但是这个:
MATCH (t:Term {term: "foo"})<-[:contains]-(d:Document)
RETURN d;
我希望这会快很多很多,但需要您在前端进行该术语提取。它也主要适用于简单的术语,而不是像 [foo?o?o?bar]
这样的查询