首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j与弹性搜索相结合

Neo4j与弹性搜索相结合
EN

Stack Overflow用户
提问于 2015-01-22 17:26:33
回答 2查看 8.5K关注 0票数 12

我使用Neo4j作为我的主数据库。这是一个很好的图表数据库,可以让我很好地控制节点之间的连接。然而,它似乎高度缺乏搜索全文(在网站上搜索功能)。因此,我正在考虑使用Elasticsearch在我的应用程序上创建搜索功能。但是在这样做的时候几乎没有什么问题。假设我们正在搜索用户的帖子。在neo4j中,posts可以有以下模型。

代码语言:javascript
复制
(post)<-[:AUTHOR]-(user)
(post)-[:LIKED_BY]->(otherusers)
(post)-[:COMMENTED_BY]->(otherusers)
(post)-[:HAS_PHOTO]->(photos)

Neo4j (比方说在用户配置文件中获取帖子时)的好处是,您可以同时抓取所有这些信息(当您访问它时,如果您已经喜欢该帖子,也可以获取它的配置文件图片和用户详细信息)。这是一个查询(cypher命令)中的很多细节。现在,如果我们想给出与Elasticsearch输出相同的详细信息,我现在可以考虑以下几点:

  1. 将所有内容存储在Neo4j和Elasticsearch中。搜索文本时,列出来自elasticsearch本身的结果。但是仍然存在一些问题,比如用户是否已经喜欢这个帖子(这可能需要再次查询每个帖子的近地天体?)这听起来不太好)
  2. 在Elasticsearch中存储post id。在填充搜索结果时,使用这个post id从neo4j数据库获取每个帖子的信息,并显示结果。(10个结果-> 10个单独的呼叫,听起来又很低效)
  3. 获取Elasticsearch提供的if列表,并对neo4j进行1次调用并获取结果(不知道如何做,也不知道是否存在性能问题)。密码参考可能会有帮助。

除了这些,还有什么解决办法吗?这些听起来有点低效。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-22 18:26:02

这是一个基于观点的问题,因为它没有一个“正确”的答案,所以准备好让这个无趣的锤子掉下来……但是我一直在想,一到二( Elasticsearch,然后Neo)穿孔是处理这个问题的最好方法:在Elasticsearch中执行索引属性,执行全文搜索以获得可能的ID,然后构建一个将结果限制为返回ID的Cypher匹配。

在Cypher中,可以使用IN []返回数组中匹配的记录。所以你可以做MATCH (u:Student { age: 30 }) WHERE ID(u) IN [1, 2, 3, 4] RETURN u。因此,将Elasticsearch与Neo集成在一起的诀窍是使围绕ES结果构建Cypher查询变得更加容易。我真的没有这样做的窍门,因为这将取决于你的语言和司机。

在Neo4j.rb中,我正在考虑尝试将其自动化,以便您可以这样做:

代码语言:javascript
复制
student.lessons(:l).where(name: 'Chris').to_a

...and --它将知道教训模型正在使用Elasticsearch,执行查询,然后为用户更改查询,因此实际上如下所示:

代码语言:javascript
复制
student.lessons(:l).where('ID(l) IN {elasticsearch_results}').params(elasticsearch_results: [1, 2, 3, 4]).to_a`

我一直在使用搜索踢与Neo的全文搜索,它一直进展顺利。我觉得这是可行的。不是解决你的问题,但这是我如何思考它,所以也许它会给你一些想法。

值得注意的是,Neo使用=~进行模糊搜索,只是不使用索引,因此可能会影响性能。不过,这可能不是一个问题,因为您可以过滤节点数和属性,Cypher必须通过向查询的其他部分添加更多信息来检查。您应该对数据进行一些基准测试,以确定是否需要增加Elasticsearch和更复杂的查询的开销。

票数 9
EN

Stack Overflow用户

发布于 2015-02-05 07:51:33

我也在寻找Neo4J & Elasticsearch集成。我看过"Neo4j河ElasticSearch插件“。但我不知道怎么用。如果你们能找到与"Neo4j河插件ElasticSearch“集成的任何信息,请告诉我,这将是非常有用的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28094985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档