写入流程
创建文档(Create Document): 当用户创建一个新文档时,Elasticsearch 将文档分配给一个主分片(Primary Shard)和一些副本分片(Replica Shard)。
建立倒排索引(Build Inverted Index): Elasticsearch 会对每个字段创建倒排索引,以便能够快速地搜索文档。倒排索引记录了每个单词在哪些文档中出现以及在文档中出现的位置。
存储文档(Store Document): 存储文档包括两个过程:首先,将文档分配给一个主分片和一些副本分片,然后将分片保存到一个或多个节点(Node)上。文档被存储在内存中,并且可以被持久化到磁盘上。
刷新(Flush): 为了保证数据的一致性,Elasticsearch 需要周期性地将内存中的文档刷新到磁盘上。默认情况下,Elasticsearch 每秒钟会自动执行一次刷新操作。当用户执行一些修改操作(例如添加或删除文档)时,也会触发手动刷新操作。
提交(Commit): 提交操作将刷新数据并更新倒排索引,使之生效。Elasticsearch 会在主分片和副本分片上执行提交操作,以保证数据的一致性和可靠性。
读取流程
执行查询(Execute Query): 当用户执行一个查询操作时,Elasticsearch 会将查询路由到包含相关数据的节点上,并且在节点上执行查询操作。
评分和排序(Scoring and Ranking): 在执行查询之后,Elasticsearch 会对每个文档进行评分和排序,以便返回与查询最相关的文档。评分是根据文档和查询之间的相关性计算出来的,可以使用各种算法进行计算。
返回结果(Return Results): 最后,Elasticsearch 将评分最高的文档返回给用户,并且将结果进行格式化,以便用户能够轻松地查看搜索结果。