golang之ElasticSearch

呆临 · · 173 次点击 · · 开始浏览    

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

等等,,,


有疑问加站长微信联系

本文来自:简书

感谢作者:呆临

查看原文:golang之ElasticSearch

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:812540095

173 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传