• elasticsearchdsl笔记


    一、elasticsearch安装

    1. 安装java1.8以上

    2. 安装elasticsearch-rtf(https://github.com/medcl/elasticsearch-rtf)

    3. head插件和kibana的安装

      • headA web front end for an elastic search cluster
      • KibanaKibana is a window into the Elastic Stack. It enables visual exploration and real-time analysis of your data in Elasticsearch

    二、Elasticsearch学习

    1. elasticsearch概念

      • 集群
      • 节点
      • 分片:将索引划分为多份的能力,允许水平分割和扩展容量,多个分片响应请求,提高性能和吞吐量
      • 副本

    2. elasticsearchmysql概念对比

    Elasticsearch

    Mysql

    Index(索引)

    数据库

    Type(类型)

    Documents(文档)

    Fields

    3. 倒排索引

    倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)

    4. es的文档、索引的CRUD操作

      • 索引初始化操作
      • 指定分片和副本的数量
      • shards一旦设置不能修改
        1 PUT  lagou
        2 {
        3      “settings”: {
        4              “index”: {
        5                      “number_of_shards”: 5,
        6                      “number_of_replicas”:1
        7          }
        8      }
        9 } 
      •  获取settings信息
        1 GET  lagou/_settings
        2 GET  _all/_settings
        3 GET  _settings
      • 更新settings信息
        1 PUT  lagou/_settings
        2 {
        3      “number_of_replicas”:2
        4 }
      • 获取索引信息
        1 GET  _all
        2 GET  lagou
      • 保存一个文档
         1 PUT  lagou/job/1   --可以不指明id(不指明id,需用POST提交)
         2 {
         3     "title":"python分布式爬虫开发",
         4     "salary_min":15000,
         5     "city":"北京",
         6     "company":{
         7         "name":"百度",
         8         "company_addr":"北京市软件园"
         9     },
        10     "publish_date":"2017-4-16",
        11     "comments":15
        12 }
      • 获取文档
        1 GET  lagou/job/1
        2 GET  lagou/job/1?_source=title
        3 GET  lagou/job/1?_source=title,city
      • 修改文档---覆盖方式
        1 PUT  lagou/job/1
        2 {
        3     Xxx:yyy
        4 }
      •  修改文档---增量修改方式
        1 POST  lagou/job/1/_update
        2 {
        3     "doc":{
        4         "comments":100
        5     }
        6 }
      • 删除文档
        1 DELETE  lagou/job/1
      • 删除type
        1 POST lagou/job/_delete_by_query?conflicts=proceed
        2 {
        3     "query": {
        4     "match_all": {}
        5   }
        6 }
      • 删除索引
        1 DELETE  lagou

     5. es的批量操作

      • 原始数据

      • 批量查询
         1 GET _mget
         2 {
         3   "docs":[
         4     {
         5       "_index":"testdb",
         6       "_type":"job1",
         7       "_id":1
         8     },
         9     {
        10       "_index":"testdb",
        11       "_type":"job2",
        12       "_id":2
        13     }
        14     ]
        15 }

        或者

         1 GET testdb/_mget
         2 {
         3   "docs":[
         4     {
         5       "_type":"job1",
         6       "_id":1
         7     },
         8     {
         9       "_type":"job2",
        10       "_id":2
        11     }
        12     ]
        13 }

        或者

         1 GET testdb/job1/_mget
         2 {
         3   "docs":[
         4     {
         5       "_id":1
         6     },
         7     {
         8       "_id":2
         9     }
        10     ]
        11 }

        或者

        1 GET testdb/job1/_mget
        2 {
        3   "ids":[1,2]
        4 }
      • bulk批量操作
    • 批量导入可以合并多个操作,比如indexdeleteupdatecreate等等。也可以帮助我们从一个索引导入到另一个索引。
    • 命令格式:
      1 action_and_meta_data\n
      2 optional_source\n
      3 action_and_meta_data\n
      4 optional_source\n
      5 ...
      6 action_and_meta_data\n
      7 optional_source\n
    •  例如:
       1 {"index":{"_index":"test1", "_type":"type1", "_id":1}}
       2 {"field1":"value1", ...}
       3 
       4 {"delete":{"_index":"test1", "_type":"type1", "_id":2}}
       5 
       6 {"create":{"_index":"test1", "_type":"type1", "_id":1}}
       7 {"field1":"value1", ...}
       8 
       9 {"update":{"_index":"test1", "_type":"type1", "_id":1}}
      10 {"doc":{"field1":"value1"}}
    • 需要注意的是,每一条数据都由两行构成(delete除外),其他的命令比如indexcreate都是由元信息行和数据行组成,update比较特殊它的数据行可能是doc也可能是upsert或者script
    • 批量导入
      1 POST  _bulk
      2 {"index":{"_index":"lagou", "_type":"job", "_id":1}}
      3 {"title":"python分布式爬虫开发", "salary_min":15000, "city":"北京", "company":{"name":"百度", "company_addr":"北京市软件园"}, "publish_date":"2017-4-16", "comments":15}
      4 {"index":{"_index":"lagou", "_type":"job", "_id":2}}
      5 {"title":"python django开发", "salary_min":30000, "city":"上海", "company":{"name":"腾讯", "company_addr":"北京市软件园4-1"}, "publish_date":"2017-4-17", "comments":30}

     6. 映射(mapping

    创建索引的时候,可以预先定义字段的类型以及相关属性,mapping是类似于数据库中的表结构定义,主要作用如下:

    • 定义index下的字段名
    • 定义字段类型,比如数值型、浮点型、布尔型等
    • 定义倒排索引相关的设置,比如是否索引、记录position

    作用:会让索引建立得更加细致和完善

    类型:静态映射和动态映射

    内置类型:

    • String类型:textkeyword
    • 数字类型:long, integer, short, byte, double, float
    • 日期类型:date
    • Bool类型:boolean
    • Binary类型:binary
    • 复杂类型:objectnested
    • Geo类型:geo-pointgeo-shape
    • 专业类型:ipcompetion

     常用属性:

    属性 描述 适合类型
    store

    Yes:存储,no:不存储,默认no

     all
    index  

    yes:分析,no:不分析,默认值为true

     string
    null_value  

    如果字段为空,可以设置一个默认值,比如NA

     all
    analyzer  

    可以设置索引和搜索时用的分析器,默认使用的是standard分析器,还可以使用whitespacesimpleenglish

     all
     

    include_in_all

    默认es为每个文档定义一个特殊域_all,它的作用是让每个字段被搜索到,,如果不想某个字段被搜索到,可以设置为false

     
     all
    format  

    时间格式字符串的模式

     date
      • 创建映射
         1 PUT zhilian
         2 {
         3   "mappings": {
         4     "job":{
         5       "properties": {
         6         "title":{
         7           "type":"text"
         8         },
         9         "salary_min":{
        10           "type":"integer"
        11         },
        12         "city":{
        13           "type":"keyword"
        14         },
        15         "company":{
        16           "properties": {
        17             "name":{
        18               "type":"text"
        19             },
        20             "company_addr":{
        21               "type":"text"
        22             },
        23             "employee_count":{
        24               "type":"integer"
        25             }
        26           }
        27         },
        28         "publish_date":{
        29           "type":"date",
        30           "format": "yyyy-MM-dd"
        31         },
        32         "comments":{
        33           "type": "integer"
        34         }
        35       }
        36     }
        37   }
        38 }
      •  获取mapping
        1 GET zhilian/job/_mapping

     7.查询

      • 未完待续...
  • 相关阅读:
    Makefile编写
    C++静态库与动态库
    C语言编译过程详解
    Fiddler抓HTTPS
    web测试的一些关注点
    Appium使用过程中的一些坑
    Jmeter+Maven+Jenkins的搭建笔记
    华为DHCP+VLANDHCP RELAY配置重点
    华为GVRP配置重点
    802.11协议总结
  • 原文地址:https://www.cnblogs.com/dowi/p/10097002.html
Copyright © 2020-2023  润新知