Elasticsearch

131 阅读2分钟

elasticsearch

一、安装

安装es

docker run -d --name es -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e "discovery.type=single-node" --network es -p 9200:9200 -p 9300:9300 elasticsearch:7.17.1

安装kibana

docker run -d --name kn --network es -e "ELASTICSEARCH_HOSTS=http://es:9200" -p 5601:5601 kibana:7.17.1

安装es-head

docker run -d --name es-head --network es -p 9100:9100 mobz/elasticsearch-head:5-alpine

配置

es

跨域问题

文件位置:/usr/share/elasticsearch/config/elasticsearch.yml
http.cors.enabled: true 
http.cors.allow-origin: "*"

关闭安全提示

xpack.security.enabled: false

安装ik分词器

github下载es对应版本的ik分词器,解压至"/usr/share/elasticsearch/plugins/ik"目录 重启es
kibana

设置中文

文件位置:/usr/share/kibana/config/kibana.yml
i18n.locale: "zh-CN"

二、API

添加索引

创建索引

PUT /索引名

添加文档

添加ID为1的文档,索引不存在会自动创建

PUT /vczs/_doc/1
{
  "name": "John Doe"
}

不指定ID添加文档,索引不存在会自动创建

POST /vczs/_doc
{
  "name": "kevin"
}

常规查询

最粗粒度的拆分

POST _analyze
{
  "analyzer": "ik_smart",
  "text":     "我是蔡徐坤"
}

最细粒度的拆分

POST _analyze
{
  "analyzer": "ik_max_word",
  "text":     "我是蔡徐坤"
}

查询所有文档、默认数量10

GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" }
  ]
}

查询10条数据 从第10个开始

GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" }
  ],
  "from": 10,
  "size": 10
}

查询address包含"mill"或"lane"的文档

GET /bank/_search
{
  "query": { "match": { "address": "mill lane" } }
}

查询address包含"mill lane"的文档

GET /bank/_search
{
  "query": { "match_phrase": { "address": "mill lane" } }
}

查询age等于40并且state不等于ID的文档

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ]
    }
  }
}

查询balance大于20000小于30000的

GET /bank/_search
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": {
            "gte": 30000,
            "lte": 40000
          }
        }
      }
    }
  },
}

聚合查询

按州进行分组、查询账户数量

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      }
    }
  }
}

按州进行分组、查询账户数量 并且计算每个州平均账余额

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

按州进行分组、指定排序查询账户数量 并且计算每个州平均账余额

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword",
        "order": {
          "average_balance": "desc"
        }
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}