elasticsearch,full-text-search,Java,Ruby,elasticsearch,Full Text Search" /> elasticsearch,full-text-search,Java,Ruby,elasticsearch,Full Text Search" />

Java Elasticsearch中的索引是什么

Java Elasticsearch中的索引是什么,java,ruby,elasticsearch,full-text-search,Java,Ruby,elasticsearch,Full Text Search,Elasticsearch中的索引是什么?一个应用程序有多个索引还是只有一个 假设你为某个汽车制造商建立了一个系统。它涉及人员、汽车、备件等。您是否有一个名为制造商的索引,或者您是否有一个针对人员、一个针对汽车和第三个针对备件的索引?有人能解释一下吗?索引是一种数据结构,用于存储字段到相应文档的映射。目标是允许更快的搜索,通常以增加内存使用和预处理时间为代价 您创建的索引数量是一个设计决策,您应该根据应用程序需求来决定。您可以为每个业务概念创建索引。。。您可以为一年中的每个月创建一个索引 你应该

Elasticsearch中的索引是什么?一个应用程序有多个索引还是只有一个


假设你为某个汽车制造商建立了一个系统。它涉及人员、汽车、备件等。您是否有一个名为制造商的索引,或者您是否有一个针对人员、一个针对汽车和第三个针对备件的索引?有人能解释一下吗?

索引是一种数据结构,用于存储字段到相应文档的映射。目标是允许更快的搜索,通常以增加内存使用和预处理时间为代价

您创建的索引数量是一个设计决策,您应该根据应用程序需求来决定。您可以为每个业务概念创建索引。。。您可以为一年中的每个月创建一个索引

你应该花点时间熟悉lucene和elasticsearch的概念


通过一些好的问题来看看这个问题的答案,答案比我们想象的要微妙得多。您可以将索引用于多种不同的用途

关系指数 最简单和最熟悉的布局克隆了您从关系数据库中所期望的内容。您可以(非常粗略地)将索引想象成数据库

  • MySQL=>Databases=>Tables=>Rows/Columns
  • ElasticSearch=>索引=>类型=>具有属性的文档
ElasticSearch集群可以包含多个
索引
(数据库),而这些索引又包含多个
类型
(表)。这些类型包含多个
文档
(行),每个文档都有
属性
(列)

因此,在您的汽车制造场景中,您可能有一个
子工厂
索引。在此索引中,有三种不同的类型:

  • 汽车
  • 备件
然后,每种类型都包含对应于该类型的文档(例如,Subaru Imprezza文档位于
车辆
类型内。该文档包含该特定车辆的所有详细信息)

搜索和查询采用以下格式:

为了检索斯巴鲁文档,我可以这样做:

  $ curl -XGET localhost:9200/SubaruFactory/Cars/SubaruImprezza

测井指标 现在,现实情况是索引/类型比我们在RDBMs中使用的数据库/表抽象灵活得多。它们可以被视为方便的数据组织机制,并根据您设置数据的方式增加性能优势

为了演示一种完全不同的方法,许多人使用ElasticSearch进行日志记录。标准格式是为每天分配一个新索引。您的索引列表可能如下所示:

  • 日志-2013-02-22
  • 日志-2013-02-21
  • 日志-2013-02-20
ElasticSearch允许您同时查询多个索引,因此执行以下操作不成问题:

  $ curl -XGET localhost:9200/logs-2013-02-22,logs-2013-02-21/Errors/_search=q:"Error Message"
它同时搜索最近两天的日志。由于日志的性质,这种格式具有优势——大多数日志从不被查看,它们是以线性时间流组织的。为每个日志创建索引更符合逻辑,并提供更好的搜索性能

用户索引 另一种完全不同的方法是为每个用户创建索引。假设你有一些社交网站,每个用户都有大量随机数据。您可以为每个用户创建一个索引。您的结构可能如下所示:

  • 扎克指数
    • 爱好类型
    • 朋友类型
    • 图片类型
  • 弗雷德指数
    • 爱好类型
    • 朋友类型
    • 图片类型
请注意,这种设置是如何以传统的RDBM方式轻松完成的(例如,“用户”索引,以爱好/朋友/图片作为类型)。然后,所有用户都会被放入一个巨大的索引中


相反,出于数据组织和性能原因,有时将数据分开是有意义的。在这个场景中,我们假设每个用户都有很多数据,我们希望它们分开。ElasticSearch可以让我们为每个用户创建一个索引。

上面的一个在很短的时间内太详细了,它可以定义为

索引:它是不同类型文档和文档属性的集合。索引还使用碎片的概念来提高性能。例如,一组文档包含社交网络应用程序的数据。 来自tutorialpoints.com的答案

因为索引是不同类型文档的集合,所以问题取决于您想要如何分类

您是否有一个名为manufacturer的索引? 是的,我们将与制造商保存一份文件

你有一个关于人、一个关于汽车、三分之一关于备件的指数吗?有人能解释一下吗? 想象一下同一个制造商给许多在路上驾驶的人的一辆汽车,根据使用次数的不同,可能会有很多指标

如果我们深入思考,就会发现除了第一个问题外,所有的问题都是无效的。 弹性搜索文档与SQL文档、csv文档或电子表格文档大不相同,从一个索引到强大的查询语言,您可以创建数百万种csv样式的数据分类文档

由于其惊人的快速和索引功能,我们只为一个客户创建一个索引,并根据需要创建多种类型的文档网。 例如:

所有老年人使用相同的模式。或者一个老年人使用所有模式


置换是有限的。

@Zach的答案对elasticsearch 5.X及以下版本有效。由于elasticsearch 6.X
类型已被弃用,并将在7.X中完全删除。引用elasticsearch文档:

最初,我们谈到“索引”类似于SQL数据库中的“数据库”,而“类型”相当于“表”。 这是一个糟糕的类比,导致了错误的假设。