Elasticsearch之详细基础语法

Elasticsearch之详细基础语法,第1张

Elasticsearch之详细基础语法

Elasticsearch之详细基础语法
    • 优化
      • 配置
      • 创建
      • 查询
    • 命令
    • 字段类型
    • 创建
    • 添加数据
    • 修改索引
    • 打开/关闭索引
    • 删除
    • 自定义分词器
    • 查询
      • 命令说明
      • 查询索引Mapping(结构)
      • 查全部 match_all
      • 单条件查询
      • Bool多条件查询
      • 聚合查询 Aggregation

优化 配置
  • 当机器内存小于64G时,遵循通用的原则,50%给ES,50%留给lucene。

  • 当机器内存大于64G时,遵循以下原则:

    • a. 如果主要的使用场景是全文检索, 那么建议给ES Heap分配 4~32G的内存即可;其它内存留给 *** 作系统, 供lucene使用(segments cache), 以提供更快的查询性能。

    • b. 如果主要的使用场景是聚合或排序, 并且大多数是numerics, dates, geo_points 以及not_analyzed的字符类型, 建议分配给ES Heap分配 4~32G的内存即可,其它内存留给 *** 作系统,供lucene使用(doc values cache),提供快速的基于文档的聚类、排序性能。

    • c. 如果使用场景是聚合或排序,并且都是基于analyzed 字符数据,这时需要更多的 heap size, 建议机器上运行多ES实例,每个实例保持不超过50%的ES heap设置(但不超过32G,堆内存设置32G以下时,JVM使用对象指标压缩技巧节省空间),50%以上留给lucene。

  • 禁止swap,一旦允许内存与磁盘的交换,会引起致命的性能问题。 通过: 在elasticsearch.yml 中 bootstrap.memory_lock: true, 以保持JVM锁定内存,保证ES的性能。

创建
  • 不需要分词的字段,统一设置成keyword,降低索引存储大小
查询
  • 尽量使用term、filter等精确查询
  • 尽量不使用聚合查询aggs
命令

-7.x中的type已经过时,默认设置为_doc

所有的命令都为大写

命令url解释PUT/索引名称/类型名称/文档ID创建文档(指定文档ID)POST/索引名称/索引类型创建文档(随机文档ID)POST/索引名称/类型名称/文档id/_update修改文档POST/索引名称/类型名称/_search查询数据DELETE/索引名称/类型名称/文档id删除文档/或者索引GET/索引名称/类型名称/文档id查询文档通过文档ID 字段类型 类型对应类型说明字符串text keywordtext自动分词,keyword全文匹配整型byte short integer long浮点型float double half_float scaled_float日期date布尔boolean二进制binary范围range数组array对象object嵌套nestedipip (IPv4 和 IPv6 地址) 创建

添加数据可以在自动索引生成之后,先查询Mapping,在Mapping的基础上进行修改索引的字段

规范:数据中String不需要进行分词的,type必须设置为keyword

  • settings: 用来设置分片,副本等配置信息(自定义分词器)
  • mappings: 字段映射,类型等
    • properties: 由于type在后续版本中会被Deprecated, 所以无需被type嵌套
POST index_name
{
  "settings": { ... any settings ... },
  "mappings" : {
      "properties" : {
        "field1" : {
          "type" : "keyword"
        },
        "field2" : {
          "type" : "long"
        },
        "field3" : {
          "type" : "text"
        },
        "field4" : {
          "type" : "date"
        },
        "field5" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
}
添加数据
POST index_name/_doc
{
  "name" : "姓名" ,
  "age" : "年龄" ,
  "sex" : "性别" 
}

禁止自动创建索引

可以通过在 config/elasticsearch.yml 的每个节点下添加下面的配置:

action.auto_create_index: false
修改索引

修改副本数量为0

PUT /test-index-users/_settings
{
  "settings": {
    "number_of_replicas": 0
  }
}

打开/关闭索引
  • 关闭索引

一旦索引被关闭,那么这个索引只能显示元数据信息,不能够进行读写 *** 作。

POST index_name/_close
  • 打开索引
POST index_name/_open
删除
DELETE index_name
自定义分词器
PUT /es_medias_test2
{
  "settings": {
    "analysis": {
      "analyzer": {
        "comma": {  //自定义分词器名称
          "type": "pattern",
          "pattern": ","
        }
      }
    }
  },
  "mappings": {
    "esmedias": {
      "properties": {
        "mediaTag": {
          "type": "text",
          "analyzer": "comma"
        }
      }
    }
  }
}

自定义分词器

PUT test_index2
{
"settings":{
  "analysis":{
    "analyzer":{
        "symbol_smart":{
            "type":"custom",
            "char_filter":[],
            "tokenizer":"punctuation",
            "filter":[]
        }
    },
    "tokenizer":{
        "punctuation":{
            "type":"pattern",
            "pattern":"[.,!?]"
        }
    },
    "char_filter":{},
    "filter":{}
    }
  }
}

测试分词器

POST test_index2/_analyze
{
   "analyzer": "symbol_smart",
   "text": "心内科,心外科"
}

参考:

https://zhuanlan.zhihu.com/p/43437056

查询

查询语句按照JSON格式映射

命令说明 命令说明from, size分页match模糊查询match_phrase段落匹配term精确查询terms多字段精确查询bool多条件查询query查询filter过滤 必须满足 不计入得分sort排序should任意满足一个 查询索引Mapping(结构)
GET index_name
查全部 match_all
GET index_name/_search
OR
GET index_name/_search
{
  "query": {
    "match_all": {}
  }
}
单条件查询

每次只能有一个查询

  • from size 指定查询条数,类似于sql的分页
  • _source 限制返回的字段 _source
GET /atlas_cloud_logs/_search
{
  "from": 0, 
  "size": 2, 
  "_source": ["字段"],
  "query": {
    "match": {
      "字段": "条件内容"
    }
  }
}
Bool多条件查询

query 上下文的条件是用来给文档打分的,匹配越好 _score 越高;

filter 的条件只产生两种结果:符合与不符合,后者被过滤掉。

  • query 查询 计入得分

  • filter 必须满足 不计入得分

  • must 必须

  • should 或者

  • must_not 不等于

  • sort 排序 _score 查询分数

  • minimum_should_match 至少匹配多少should 字段

  • match 模糊查询

  • match_phrase 段落匹配 查询字段中包含查询内容mill

  • range 范围查询

  • gte 大于等于

  • lte 小于等于

  • e 等于

GET index_name/_search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "fieldName": {
            "gte": 10, 
            "lte": 200
          }
        }
      },
      "match_phrase": { "address": "mill" }
    }
  },
  "sort": [
    { "_score": "asc" }
  ],
  "minimum_should_match": 1
}
聚合查询 Aggregation
GET /atlas_cloud_logs/_search
{
  "size": 0, 
  "query": {
   "match_all": {
   }
  },
  "aggs": {
    "聚合后返回的关键字": {
      "terms": {
        "field": "聚合字段.keyword"
      }
    }
  }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5618496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存