ElasticSearch基本用法


一、Elasticsearch基本概念

  • 索引含有相同属性的文档集合
  • 类型索引可以定义一个或多个类型,文档必须属于一个类型
  • 文档文档是可以被索引|的基本数据单位
  • 分片 每个索引都有多个分片,每个分片是一个Lucene索弓|
  • 备份 拷贝一份分片就完成了分片的备份

二、Elasticsearch基本用法

1、RESTFul API

  • API基本格式:http://<ip>:<port>/<索引>/<类型>/<文档id>
  • 常用HTTP动词:GET/PUT/POST/DELETE

2、创建索引

  • 非结构化创建

先创建索引:

查看概览:

查看索引数据(非结构化索引):

  • 结构化创建

通过复合查询编写结构化索引提交请求:

刷新刚刚提交的请求并查看结构化索引:

为了方便,可以在postman中进行添加索引数据:

url: 127.0.0.1:9200/people
method: PUT
{
    "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 1
    },
    "mappings": {
        "man": {
            "properties": {
                "name": {
                    "type": "text"
                },
                "country": {
                    "type": "keyword"
                },
                "age": {
                    "type": "integer"
                },
                "date": {
                    "type": "date",
                    "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                }
            }
        }
    }
}


请求发送成功之后,可以在浏览器上进行刷新检验,结果如下:

3、插入

  • 指定文档id插入
    url: 127.0.0.1:9200/people/man/1
    method: POST
    {
      "name": "cyh",
      "country": "china",
      "age": 18,
      "date": "2020-01-23"
    }
    指定文档id插入数据:

    插入成功之后浏览:

  • 自动产生文档id插入
    url: 127.0.0.1:9200/people/man
    method: POST
    {
      "name": "Romana",
      "country": "US",
      "age": 20,
      "date": "2020-01-24"
    }
    自动产生文档id插入数据:

    插入成功之后浏览:

4、修改

  • 直接修改文档

    url: 127.0.0.1:9200/people/man/1/_update
    method: POST
    {
      {
      "doc": {
          "name": "lily"
      }
    }
    }

    指定文档修改数据:

    修改成功之后浏览:

  • 脚本修改文档

    url: 127.0.0.1:9200/people/man/1/_update
    method: POST
    {
      "script": {
          "lang": "painless",
          "inline": "ctx._source.age += 10"
      }
    }{
      "script": {
          "lang": "painless",
          "inline": "ctx._source.age = params.age",
          "params": {
              "age": 100
          }
      }
    }

    脚本修改数据:

    修改成功之后浏览:

5、删除

  • 删除文档
    url: 127.0.0.1:9200/people/man/1
    method: DELETE
  • 删除索引

(1)通过接口删除

url: 127.0.0.1:9200/people
method: DELETE


(2)在浏览器上删除

6、查询

先创建book索引

url: 127.0.0.1:9200/book
method: PUT
{
    "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
    },
    "mappings": {
        "novel": {
            "properties": {
                "word_count": {
                    "type": "integer"
                },
                "author": {
                    "type": "keyword"
                },
                "title": {
                    "type": "text"
                },
                "publish_date": {
                    "type": "date",
                    "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                }
            }
        }
    }
}

插入数据:

  • 简单查询

1、查询索引中的一条数据:

url: 127.0.0.1:9200/book/novel/1
method: GET


2、所有数据的查询(默认显示前10条):

url: 127.0.0.1:9200/book/_search
method: POST
{
    "query": {
        "match_all": {}
    }
}

  • 条件查询

数据条数及偏移量查询:

{
    "query": {
        "match_all": {}
    },
    "from": 3, # 以一定的偏移量来查看我们检索的结果,缺省从检索的第一条数据开始显示
    "size": 5 # 指定检索结果中输出的数据条数,缺省为10}

关键字查询:

{
    "query": {
        "match": {
            "title": "ElasticSearch"
        }
    }
}

排序查询:

{
    "query": {
        "match_all": {}
    },
    "sort": [
        {"publish_date": {"order": "desc"}}
        ]
}
  • 聚合查询

单个字段聚合:

{
    "aggs": {
        "group_by_word_count": {
            "terms": {
                "field": "word_count"
            }
        },
        "group_by_publish_date": {
            "terms": {
                "field": "publish_date"
            }
        }
    }
}


字段统计聚合:

{
    "aggs": {
        "grades_word_count": {
            "stats": {
                "field": "word_count"
            }
        }
    }
}

{
    "aggs": {
        "grades_word_count": {
            "min": {
                "field": "word_count"
            }
        }
    }
}


评论
评论
  目录