4.Elasticsearch索引文档

本文从索引文档开始,后面逐步讲解索引,搜索,聚合等概念,如果有概念不能理解,可以先照着代码操作,后面会更详细的解释。

我们这里创建几个文档,用来存储user信息,在使用mysql时,一条user信息,在user表中可能是一条数据,然后这条数据中会关联其他表的id,这样多张关联表的内容,综合起来,会形成一个完整的user信息。但是在es中,我们可以把所有关于user的信息全部存在一个文档中,以user文档的形式存储,一个文档代表一个user。

存储数据到es中的行为叫做索引,索引一个文档前,需要确定这个文档存放在哪里;一个es集群可以包含多个索引,每个索引可以包含多个类型,每个类型中又可以存储不同的文档,每个文档可以有多个属性。

1.名词解释

下面对这几个关键词进行简单的解释,部分关键词后面会详细解释。

索引(名词):

如前所述,一个 索引 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方。 索引 (index) 的复数词为 indices 或 indexes 。

索引(动词):

索引一个文档 就是存储一个文档到一个 索引 (名词)中以便它可以被检索和查询到。这非常类似于 SQL 语句中的 INSERT 关键词,除了文档已存在时新文档会替换旧文档情况之外。

倒排索引:

关系型数据库通过增加一个 索引 比如一个 B树(B-tree)索引 到指定的列上,以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做 倒排索引 的结构来达到相同的目的。

默认的,一个文档中的每一个属性都是被索引的(有一个倒排索引)和可搜索的。一个没有倒排索引的属性是不能被搜索到的。我们将在 倒排索引 讨论倒排索引的更多细节。

在理解这些概念时,可以对比着mysql中,数据库,表,每条数据,和java中的对象,对象属性等来关联理解。

2.索引user文档

我们接下来做如下操作: - 1.每一个user的信息索引为一个文档,包含他的全部信息 - 2.每个user文档都是user类型 - 3.user类型的文档放在people索引内

- 4.people索引保存在es集群中

上面这四步,我们用一条命令即可完成

PUT people/user/1
{
  "id":1,
  "name":"张三",
  "age":18,
  "address":"杭州",
  "interests": [ "bastkeyball", "football" ],
  "create_time":"2018-02-04"
}

PUT people/user/1 :在people索引下的user类型中,新建一个文档,id为1,文档内容为括号中的。

同步到mysql中,我们可以理解为:在名为people的数据库中,有张user表,在user表中存一条记录,id为1,各个字段的值为括号中的内容。

不同的是,在mysql中,做此操作,要建库,建表,然后才能插入,而es中,索引和存储等过程一行命令全部完成,es在内部会搞定一切。

我们再添加几条记录:

PUT people/user/2
{
  "id":2,
  "name":"李四",
  "age":23,
  "address":"太原",
  "interests": [ "bastkeyball", "football" ],
  "create_time":"2017-05-04"
}

PUT people/user/3
{
  "id":3,
  "name":"王五",
  "age":48,
  "address":"杭州",
  "interests": [ "bastkeyball", "football" ],
  "create_time":"2018-02-04"
}

PUT people/user/4
{
  "id":4,
  "name":"张飞",
  "age":27,
  "address":"宁波",
  "interests": [ "bastkeyball", "football" ],
  "create_time":"2018-02-04"
}

下一篇:5.Elasticsearch检索文档

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券