3

抱歉标题模棱两可,再合适不过了。

我正在探索 Elastic Search,它看起来很酷。我的问题是概念性的,因为我习惯了 sql。

在 Sql 中,您有不同的数据库,并且您将每个应用程序的数据存储在那里。ES中是否存在相同的概念?还是来自我所有应用程序的所有数据最终都将放在同一个地方?在这种情况下,避免不合适的数据产生不需要的结果的最佳实践是什么?

4

2 回答 2

4

无模式并不意味着无结构:

  • 在弹性搜索中,您可以将数据组织到文档集合中
  • 一个顶级文档集合大致相当于一个数据库
  • 您还可以在顶级集合中分层创建新的文档集合,这是一个非常粗略的数据库表等价物
  • 当您搜索文档时,您在特定文档集合中搜索文档(例如搜索 blog1 中的所有帖子)
  • 单个文档可以被视为等同于数据库表中的行
  • 另请注意,我说的大致等价——SQL 中的数据通常通过关系规范化为表,而文档(在 ES 中)通常包含大型数据实体。例如,将所有评论嵌入到博客文章文档中通常是有意义的,而在 SQL 中,您可以将评论和博客文章规范化到单独的表中。

对于一个不错的教程,我建议看一下“ElasticSearch in 5 minutes”教程。

于 2012-10-16T13:47:48.647 回答
3

从 SQL 切换到搜索引擎有时可能具有挑战性。Elasticsearch 有一个索引的概念,可以粗略地映射到数据库和类型,也可以非常粗略地映射到表。Elasticsearch 具有非常强大的机制,可以选择单一类型的记录(行)并组合来自不同类型和索引(联合)的结果。但是,目前不支持联接。elasticsearch 支持的唯一关系是 has_child,但它不适合建模多对多关系。因此,在大多数情况下,您需要准备好对数据进行非规范化,以便将其存储在单个表中。

于 2012-10-16T13:52:15.823 回答