弹性搜索和“数据库”

时间:2012-10-16 13:36:05

标签: elasticsearch

对于模棱两可的标题感到抱歉,无法更好地适应。

我正在探索弹性搜索,它看起来非常酷。我的问题是概念性的,因为我习惯了sql。

在Sql中,您有不同的数据库,并为每个应用程序存储数据。 ES中是否存在相同的概念?或者我所有应用程序的所有数据都会在同一个地方结束?在这种情况下,避免不合适数据产生不良结果的最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

Schemaless并不意味着无结构:

  • 在弹性搜索中,您可以将数据整理到文档集合中
  • 顶级文档集合大致相当于数据库
  • 您还可以在顶级集合中分层次地创建新的文档集合,这非常粗略地等同于数据库表格
  • 搜索文档时,搜索特定文档集合中的文档(例如搜索blog1中的所有帖子)
  • 可以将单个文档视为等同于数据库表中的行
  • 另请注意,我说大致相当 - SQL中的数据通常按关系规范化为表格,而文档(在ES中)通常包含大型数据实体。例如,将所有注释嵌入到博客文档中通常是有意义的,而在SQL中,您可以将注释和博客标准化为单个表格。

对于一个很好的教程,我建议您查看"ElasticSearch in 5 minutes"教程。

答案 1 :(得分:3)

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