最初刚学习ElasticSearch的时候,为了便于理解,我们将其与我们所学习的MySQL数据进行了类别学习
但是ElasticSearch相对于MySQL数据库,更好的我们叫它为索引库,它分为两个过程:先是建立索引,再是检索
ElasticSearch 对于不同的服务建立了不同的索引,每个索引又创建了类型[6以后只能创建一个],同时对类型进行了约束,现在我们往ES中索引文档,它内部是怎样工作的呢?
现在我们添加按照其类型的约束添加“张三”这条数据,ES拿到这条数据后,首先把整个文档进行储存在元数据区,同时会生成对应的"_id",比如这里为0,到时候我们拿0去查询,就可以得到这个文档;然后按照分词器[所谓分词器就是对你输入的数据,按照一定的规则进行划分,这里以标准分词器为例]进行划分,因为name属性是"text"类型,所以需要分词,按照规则,进行单字划分,先分“张”,然后记录这个字在右边哪个文档中出现,同时出现了几次[当然这里只是简单列举一下,实际情况可能更复杂],再分“三”,一样的操作;接下来是"age"属性,因为age是"Integer"类型,所以不需要分词,直接存储,记录。一直如此操作,直到对输入的数据完成…
现在我们要插入第二条数据,同样是现在元数据区进行储存,为其分配"_id",然后是索引区操作,现在"张"这个字不仅在0文档出现,也出现在1文档。
需求: 现在用户想要查找address为"北京"的文档,ES会进行两次搜索,先是在索引区[分词后存放的数据]找到相匹配的文档的"id",再是按照"id"去找到元数据区对应的文档,最后按照:比如在0文档出现的次数多,就把0文档排在前面,展示给用户。
总结: 索引库储存数据,分为索引区和元数据区,元数据区储存完整文档,索引区存放分词过后的数据