【发布时间】:2015-03-21 14:40:31
【问题描述】:
我使用 Neo4j 作为我的主数据库。这是一个很好的图形数据库,让我可以很好地控制节点之间的连接。但是,它似乎在搜索全文(网站上的搜索功能)方面缺乏高度。因此,我正在考虑使用 Elasticsearch 在我的应用程序上创建搜索功能。但是这样做时几乎没有问题。假设我们正在搜索用户帖子。在 neo4j 帖子中可能有以下模型。
(post)<-[:AUTHOR]-(user)
(post)-[:LIKED_BY]->(otherusers)
(post)-[:COMMENTED_BY]->(otherusers)
(post)-[:HAS_PHOTO]->(photos)
Neo4j 的好处(假设在用户个人资料中获取帖子)是您可以一次获取所有这些内容(如果您已经喜欢该帖子,还可以获取个人资料图片和用户详细信息)。这是一个查询(密码命令)中的很多细节。现在,如果我们想为 Elasticsearch 输出提供相同级别的详细信息,我现在可以考虑以下内容:
将所有内容存储在 Neo4j 和 Elasticsearch 中。当搜索文本时,会列出来自 elasticsearch 本身的结果。但是仍然存在诸如获取用户是否已经喜欢该帖子的问题(这可能需要为每个帖子再次查询neo?这听起来不太好)
在 Elasticsearch 中存储帖子 ID。填充搜索结果时,使用此帖子 id 从 neo4j 数据库中获取每个帖子的信息并显示结果。 (10 个结果 -> 10 个单独的调用,听起来又非常低效)
获取 Elasticsearch 提供的 id 列表并对 neo4j 进行 1 次调用并获取结果(不知道如何执行此操作或是否存在性能问题)。密码参考可能会有所帮助。
除此之外还有什么解决方案吗?这些听起来有点低效。
【问题讨论】:
-
嗨@pewpewlasers,我们刚刚发布了这个:graphaware.com/neo4j/2016/04/20/…
-
@ChristopheWillemsen 嘿,感谢您的链接,看起来是一个很棒的项目。一定会检查出来的。有关性能和可扩展性的任何信息?
-
性能高度依赖于密码查询、reco 引擎甚至 ES 和 neo4j 之间的延迟的性能。它当然会增加 ES 查询时间的总延迟(我们有时测量原始密码为 40 毫秒,在 neo4j 端使用基于 Java 的引擎时为 10 毫秒)。然而,我们已经使用最新版本的 neo4j 和二进制协议而不是 http 对此进行了改进。
-
@ChristopheWillemsen 好的,谢谢。一定会检查出来的。
-
@ChristopheWillemsen 是否有安装指南的链接将 neo4j 3.0.1 与弹性搜索 5.0 集成?
标签: elasticsearch neo4j cypher