5

golang之ElasticSearch

 收集于1周前 阅读数 5
以下为 快照 页面,建议前往来源网站查看,会有更好的阅读体验。
原文链接: https://studygolang.com/articles/31186

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-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类型:提供自动补全建议

等等,,,

有疑问加站长微信联系

iiUfA3j.png!mobile

猜你喜欢

关于极客头条


聚合每日国内外有价值,有趣的链接。

AD