我只是想知道什么是Elastic Search。 据说它有助于搜索数据,但是当我看到一些网络研讨会时,感觉就像我必须在一种Elastic数据存储中复制我的数据......这对我来说并不是很有意义。这样,必须在右侧报告左侧所做的所有修改,并且弹性搜索返回的数据可能不是正确的格式。 Elastic Search可以直接在我的数据库中搜索吗?
用于Neo4J图形数据库。有人已经做过那样的事吗?这只会取代Cypher的查询吗?
感谢您的建议,帮助我了解Elastic Search对我们项目的真正帮助。
答案 0 :(得分:4)
Elasticsearch 是数据库,但它不是您可能习惯的关系数据库。它是一个NoSQL数据库。
将JSON文档插入索引。您查询该索引以查找与特定条件匹配的文档。
它也是分片和节点分布式的,它具有弹性和可扩展性,并且 - 如果你设置正确 - 性能。
这意味着它非常擅长'搜索引擎'风格的数据库查询,但由于它不是关系型的,因此它不能轻易地完成SQL JOIN操作的等效操作。
一个示例用例是logstash和kibana - 称为ELK堆栈 - 其中系统事件日志(syslog,httpd日志,那种东西)由logstash处理以解析元数据 - 如日志源,引用者,URL,会话ID等 - 然后插入elasticsearch。
由于每个事件都是一个自包含的信息,因此这就是elasticsearch特别有用的。
然后,您可以使用Kibana作为可视化引擎来显示日志,还可以执行分析 - 大多数命中页面,请求的地理分布,传入引荐,基于时间的请求分发等。
但是它也整理了这些日志,所以如果你运行一个包含多个网络服务器节点的非常大的地理位置分散的网站 - 或者你的计算机房中只有很多服务器而想要总结系统日志 - 你可以提供整个弹性搜索。
它的设计使得它擅长处理近实时数据插入和分析。它对于“论坛风格”数据模型也很有效,因为基本上你所做的只是查询具有特定论坛名称的帖子列表,并查找对特定父节点的回复 - 但它们是独立的“文档”。
所以是的,你可能会用它来搜索现有的数据库,但你必须考虑你的数据模型 - 你不能只是翻译一个传统的关系模型,你必须弄平它。在RDBMS术语中,非规范化是一种罪恶,但它实际上对搜索引擎非常有用,因为您可以更有效地并行执行查询。
答案 1 :(得分:2)
存在一种结合两种方法的方法。看看这篇博文:
http://graphaware.com/neo4j/2015/09/30/recommendations-with-neo4j-and-graph-aided-search.html
答案 2 :(得分:1)
无法针对所有用例优化数据库,但幸运的是,有许多数据库可用,因此我们可以为每项任务选择最佳数据库。
Elasticsearch针对以下方面进行了优化:
Neo4j针对以下方面进行了优化:
实际上两个数据库都使用相同的底层库Lucene来指示"索引"稍后要搜索的数据。
答案 3 :(得分:0)