最近因为项目中需要用到elasticsearch,所以对elasticsearch相关的课程进行了学习,这里对学习中的知识点进行总结以加深印象,暂时不会对每个知识点进行深入的说明。
首先是elasticsearch中的基本概念
索引(index),类型(type)和文档(document)
在elasticsearch中,数据都是以索引和文档的形式进行存储,为了更好理解可以用关系型数据库中的概念进行类比:table->index,row->document。在旧版本中一个索引下还可以有多种类型,而类型已经在es7.x的版本中废除了,统一使用_doc作为类型的值
节点,集群,分片和副本
ealsticsearch是支持集群模式的,一个集群中可以有多个elasticsearch的节点,而es的索引物理上是按分片进行存储的,分片一般分布在不同的节点上,而且可以给每个分片设置副本,副本数根据用户配置的数量来定,比如设置一个分片数为3,副本数为1的索引,其存储结构如图(分片和其对应的副本一般会存储在不同的节点上)
基本的CRUD
es支持restfulAPI的形式进行操作,所以这里对基本的crud操作api进行总结
1.creat
两种方式,一种是“POST /索引名/类型名(_doc)”,这种方式系统会自动生成document id,另一种是“PUT 索引名/_create/{id}”,即指定id进行创建,如果id存在则创建失败。
2.get
通过id查找文档,即“GET 索引名/类型名/{id}”,如果文档不存在则返回404
3.index(此处是动词)文档
“PUT /索引名/类型名/{id}”,也是新建一个文档,但与create不同的是如果文档已经存在,则会将原有文档删除,索引新的文档,版本信息加一
4.update
“POST /索引名/_update/{id}”,update不会删除原来的文档,如果字段在原文档中存在则更新,不存在则新增,其方法的payload需要包含在“doc”里。
倒排索引(之后在详细写)
/to do
ES的分词
ES在对传入的文档进行存储时,需要将文档进行分词处理,一般分为三步,第一步是用Character Filters,这一步对原始文档进行预处理,主要是进行去除html等操作,第二步是用Tokenizer,这一步就是按照指定的规则进行分词,第三步是用Token Filter,主要是对最后切分出的单词进行转小写,去除停顿词,增加同义词等操作。
使用“_analyze” api可以对分词器的效果进行测试
网友评论