2012-10-16 67 views
2

对不起,模糊的标题,没有什么更好的拟合。弹性搜索和“数据库”

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

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

+0

我不是在这里解释你的问题。 “所有的数据都在同一个地方”,你指的是弹性搜索的无模式性质还是具体的关注点?还有什么你的意思是“不合格的数据”? – jsalonen

+0

假设您发送来自2个类似网站的数据,这些网站或多或少具有相同类型的表 - 比如说博客。在sql中,你创建了两个不同的数据库,数据位于不同的地方。如果你需要站点A的用户表,你可以连接到dbA等。ES中是否有类似的概念? – johnjohn

回答

3

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

  • 在弹性搜索,你可以组织你的数据转换成文档集合
  • 顶级文档集合大致相当于一个数据库
  • 您也可以按层次在顶级集合中创建新的文档集合,这与数据库表格非常相似
  • 当您搜索文档时,您将搜索特定文档集合中的文档(例如搜索特定文档集合中的文档请注意,我说的大致相当 - SQL中的数据通常按关系标准化为表格,而文档(在ES中)通常掌握大量的数据实体。例如,将所有注释嵌入博客文档中通常是有意义的,而在SQL中,您可以将注释和博文标准化为单独的表格。

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

+1

我看过灯! :)谢谢,现在一切都很有意义。 – johnjohn

3

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

+0

非常感谢您的回复! – johnjohn