美文网首页
golang之ElasticSearch

golang之ElasticSearch

作者: 缘尤会 | 来源:发表于2020-10-18 00:26 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/phvopktx.html