ES是面向文档型数据库
1. 9200和9300端口的区别
9200端口:ES节点之间通讯使用,是TCP协议端口号,ES集群之间通讯端口号。
9300端口:ES节点和外部通讯使用,暴露ES RESTful 接口端口号
2.ElasticSearch倒排索引原理
有倒排索引就一定有倒排索引。先解释一下正排索引。
举个例子,比如有5个文档,每个文档里面记录了一句话,如果我想查某句话里面的某个关键词,我就需要在每个文档里都要对这个关键词进行查询。显然,效率比较低。
那么倒排索引与之的区别又是什么呢:它会把每个关键词直接作为索引,然后把文档id的列表列出。
- 倒排索引:
以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档。一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置。由于该字或词对应的文档在动态变化,所以倒排表的建立和维护都比较复杂。但是由于一次查询能够得到关键字所对应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个引擎的效率。
3. 查询
- 简易版的查询
1. 根据多个id 进行查询
GET /index/type/_mget
{
“ids”:["1",2]
}
2. 查询年龄为21 的
GET /index/type/search?q=age:21
3. 查询年龄在30到60岁之间并且年龄降序,从0条数据到第1条数据
GET /intex/type/search?q=age[30 TO 60]&sort=age:desc&from=0&size=1
4. 查询年龄在30到60岁之间并且年龄降序,从0条数据到第1条数据,展示name 和age 字段
GET /intex/type/search?q=age[30 TO 60]&sort=age:desc&from=0&size=1 &_source=name,age
- DSL查询(结构化查询)
DSL查询 更为直观也更为简便,使用较多。
DSL查询是POST过去一个json,由于POST请求是json 格式的,所以有更多的灵活性,也有很多形式。
- term 与 match 的区别
term查询会采用精确匹配,不会对字段进行分词查询。match 会根据该字段的分词器进行分词查询。模糊匹配
GET /index/type/_search
{
"query":{
"match":{
"car":"奥迪A"
}
}
}
GET /index/type/_search
{
“from” :0,
“size”:2,
“_source”:["name","age"]
"query":{
"term":{
"car":"奥迪A"
}
}
}
4.分词器
ElasticSearch 中默认的标准分词器对中文不是很友好,会将中文的词拆分成一个一个的汉子,,因此引入中文分词器-es-ik插件
es-ik的版本一定要和es安装的版本对应
1.安装
第一步:下载es的IK插件命名为ik插件
第二步:上传到/usr/local/elasticsearch-6.4.3/plugins
第三步:重启es
注意: 查询时把analyzer从stardard改成ik smart
2.自定义扩展字典(分词器文件)
在/usr/local/elasticsearch-6.4.3/plugins/ik/config 目录下
vi custom/new_word.dic
王者荣耀
马云
保存的时候要把es停掉,不然保存报错
vi IKAnalyzer.cfg.xml
在key="ext_dict" 里吧/custom/newword.dic加进去
5. 文档映射
文档映射就是给文档中的字段指定字段类型、分词器
es中索引index相当于数据库,类型Type相当于数据表,映射Mapping相当于数据表的表结构。es中的映射用来定义一个文档,可以定义所包含的字段以及字段的类型、分词器以及属性等等。
GET /index/type/_mapping
1.动态映射
在es中不需要事先定义映射,文档写入es时,会根据文档字段自动识别类型,这种机制称之为动态映射。
2.静态映射
在es中也可以事先定义好映射,包含文档的各个字段及其类型,这种方式称之为静态映射
6.es类型支持
一.基本类型
符串:string 包括text 和keyword
keyword类型不能分词,keyword类型可以分词查询
数值型: long 、integer、short、byte 、float
日期型: date
布尔类型:boolean
二进制型:binary
数组类型: Array datatype
二 、复杂类型
地理位置类型(Geo datatypes)
1.地理坐标类型(Geo-point datatypes):用于经纬度坐标
2.地理形状类型(Geo-Shape datatypes):用于类似于多边形的复杂形状
特定类型
1.Pv4类型:ip用于ipv4地址
2.Completion类型:提供自动补全建议
等等,,,
有疑问加站长微信联系(非本文作者)