ElasticSearch关键概念教程更新中文章目录ElasticSearch关键概念教程更新中应用场景Index待更新Mapping待更新Document待更新应用场景这是一个专业的搜索引擎请务必将其与MySQL等关系型数据库分开看待和了解。如果要举一个例子让你对ES有一个清晰的认知你可以参考百度、Google搜索引擎的搜索功能可以看到当你搜索武汉科技大学这个关键字之后显示的结果所有含有“武汉科技大学”的内容都被标红并展示给你了。接下来是重点假设你写了一个模仿小红书的Web应用你想提供一个搜索接口通过获取到用户传给后端的关键词例如“武汉科技大学”来搜索特定内容按照普通开发者的想法你也许会轻而易举地想到使用MySQL的LIKE去数据库中模糊匹配或者精确匹配。但是这样会出现一个严重的问题效率低下——因为这必然导致你的查询语句会进行全表扫描——你不可能为每一列创建一个索引更何况你还可能在文章内容中查询“武汉科技大学”这个关键字更何况还要考虑查询短语/句子的情况文章的内容是不可能作为索引供你查询这样导致的结果必然就是逐条甚至于逐字逐句地去匹配你查询的内容。当然你也不要简单地就以为ES就是个查询关键字的数据库它支持将你的查询文本进行拆分之后再查询而不是简单地将你的查询文本作为一个整体去查询包含这个文本的数据例如当你搜索“武汉科技大学计算机学院”时搜索引擎对你的查询文本进行了拆分这个行为就被称作“分词”变成了“武汉科技大学”、“计算机”、“学院”、“武汉科技大学计算机学院”等等不同的不可拆分且有意义的词句进行查询。那么ES是如何达到上述的效果的呢答案是倒排索引。首先我们知道MySQL数据存储是基于正向索引即不破坏数据的整体性的前提下存入数据库的下面给一个例子idtitle1武汉科技大学2武汉大学3华中科技大学[1武汉科技大学][2武汉大学] 等都是一个整体我们暂且称呼其为“文档”如果你要查询“大学”关键字使用LIKE %大学%去每一个文档中模糊匹配你只能遍历每一条数据中的每一条title的每一个字如果满足条件则放入结果集。那么什么是倒排索引呢上述正向索引我们可以看到是根据文档查找关键字最后再确定这个文档是否包含你要查找的关键字而倒排索引不一样它是根据关键字直接查找到文档。如何通过正向索引构建出倒排索引可以看见把所有文档中的“title”拿出来进行“分词”即对句子/短语拆分为再也无法分割的关键字也就是词条然后将每个词条作为索引构建出词条与文档的对应关系即这个词条哪些文档中有。term词条id文档id武汉12科技13大学123华中1这样当你查询“大学”关键字的时候你可以直接根据倒排索引构建出的映射关系得知再文档123中包含“大学”关键字随后直接返回结果集而不需要再遍历文档了这样是不是快多了这是我在阿里云开发者社区上找的一张图介绍了正向索引和倒排索引构建的数据关系谁占据主体地位以及他们之间最重要的区别好啦在简单介绍了正向索引和倒排索引之后想必你对ES就有了一个大体上的理解这是一个专门用于搜索服务的数据库是为你的web服务构建搜索功能的首选。Index待更新相当于MySQL中的表Mapping待更新相当于MySQL中的表结构Document待更新相当于MySQL中的表中数据