操作索引库

创建索引库

PUT 索引库名

查看索引库

GET 索引库名

删除索引库

DELETE 索引库名

kibana 清空es索引全部数据 kibana删除索引命令_数据库

操作映射关系

创建映射

PUT 索引库名/_mapping/映设类型名称 
{
  "properties": {
    "字段名": {
      "type": "类型",
      "index": true,
      "store": true,
      "analyzer": "分词器"
    }
  }
}
首先就是创建时候的映设类型名称
  1. 在ES5.X版本中是可以在同一个索引库下添加多个映射类型的,每个映射类型相当于索引库来说就类似于MySQL中的数据库和表
  2. 从ES6.X开始不允许在同一个索引中添加多个映射类型
  3. 从ES5.X升级到ES6.X的多个映射类型会被保留但是通过API来创建的话就只允许一个映射类型
  4. 在ES7.X版本中映射就被废弃了,如果想在ES6升级到ES7还兼容的话,映射类型可以设置为固定的_doc
在这里我们可以看到创建映射时候有几个字段,

type:类型。这个类型有很多种。可以是text、long、short、date、integer、object等
index:是否进行索引,默认是true,如果是true,简单来说就是你可以通过索引来进行查找,但是如果配置成false,你就不可以使用索引查询
store:是否进行存储,默认值为false,是否进行额外的存储的意思
analyzer:使用的分词器是什么

创建映设中属性:类型

我们可以看到官方文档上的内容

kibana 清空es索引全部数据 kibana删除索引命令_java_02


其中String类型又分为俩种;

一种是text类型,一种是keyWord类型

  • text:可分词,不可参与聚合
  • keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
    这个比较常用

查看映射

查看某个索引库中的所有类型的映射  
GET /索引库名/_mapping
如果要查看某个类型映射,可以再路径后面跟上类型名称  
GET /索引库名/_mapping/映射名

kibana 清空es索引全部数据 kibana删除索引命令_数据库_03

操作文档

添加修改文档

POST/索引库名/类型/id值
{
   "映设字段名":"内容"
}

修改文档

PUT/索引库名/类型/id值
{
   "映设字段名":"内容"
}
修改和添加的区别

我们可以看到添加和修改的操作代码是一样的,那我们如区分什么是添加,什么是修改

如果是修改,提示就会出这样的

kibana 清空es索引全部数据 kibana删除索引命令_java_04


这是添加的

kibana 清空es索引全部数据 kibana删除索引命令_java_05


我们可以看到version这里的变化,如果是添加的话,这个版本就是1,如果是修改的话,版本就会依次叠加,并且result的提示也是不一样的

查看文档

GET/索引库名/类型/id值

删除文档

DELETE/索引库名/类型/id值

kibana 清空es索引全部数据 kibana删除索引命令_java_06

智能判断

我们之前添加的数据都是已经定义过的,那如果添加没有定义过的会不会成功呢
事实上Elasticsearch非常智能,不需要给索引库设置任何mapping映射,它也可以根据输入的数据来判断类型,动态添加数据映射。
但是这里呢,有一个小问题,如果是String类型的,他无法判断你是text还是keyWord,就会创建一个text和text的子映射keyWord,这不是我们需要看到的结果,这里就引出了动态映射模板

动态映射模板

"dynamic_templates": [
    {
      "my_template_name": { 
        ...  match conditions ... 
        "mapping": { ... } 
      }
    },
    ...
  ]
  • my_template_name:自定义模板名称
  • match conditions:匹配条件,凡是符合条件的未定义字段,都会按照这个规则来映射
  • mapping:映射规则,匹配成功后的映射规则

查询

基本查询

查询所有(match_all)
GET itheima/_search
{
  "query": {
    "match_all": {}
  }
}
匹配查询(match)
GET itheima/_search
{
  "query": {
    "match": {
      "title": "小米电视"
    }
  }
}
词条匹配(term)
GET itheima/_search
{
  "query": {
    "term": {
      "price": 3899
    }
  }
}
布尔组合(bool)

bool 把各种其它查询通过 must (与)、 must_not (非)、 should (或)的方式进行组合查询

GET itheima/_search
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "title": "小米"
        }
      },
      "must_not": {
        "match": {
          "title": "电视"
        }
      }
    }
  }
}
范围查询(range)

操作符

说明

gte

大于等于

gt

大于

lte less than and euqal

小于等于

lt

小于

GET itheima/_doc/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 1000,
        "lt": 2800
      }
    }
  }
}
模糊查询(fuzzy)
GET itheima/_doc/_search
{
  "query": {
    "fuzzy": {
      "title": "电视3"
    }
  }
}

kibana 清空es索引全部数据 kibana删除索引命令_kibana_07


kibana 清空es索引全部数据 kibana删除索引命令_数据库_08


kibana 清空es索引全部数据 kibana删除索引命令_elasticsearch_09

结果过滤

显示结果过滤
GET /索引库名称/_search
{
  "query": {
    “match_all": {}
  },
  "_source": {
    “includes”:[“显示域名称1","显示域名称12"]
    “excludes”: [“要排除的域名称"]
}
}
显示内容过滤
举例:
GET /索引库名称/_search
{
    "query":{
        "bool":{
        	"must":{ "match": { "title": "小米手机" }},
        	"filter":{
                "range":{"price":{"gt":2000.00,"lt":3800.00}}
        	}
        }
    }
}

kibana 清空es索引全部数据 kibana删除索引命令_elasticsearch_10


kibana 清空es索引全部数据 kibana删除索引命令_java_11

排序

GET /索引库名称/_search
{
    "query":{
    "match_all": {}
    },
    "sort": [
      { “域名称1": { "order": "desc" }},
      { “域名称2 ": { "order": "desc" }}
    ]
}

分页

举例:
GET /heima/_search
{
  "query": {
    "match_all": {}
  },
  “from”: 3, #起始位置
  “size”: 3  #每页显示条数
}

高亮

其实不管我们在任何浏览器对关键字进行搜索的时候,我们都会发现,搜索的结果中搜索的关键字变成了高亮显示,我们可以在任意浏览器中查看源码会发现都只是在字段前后加上一个显示的效果而已,那我们使用kibana操作Elasticsearch的时候也是可以实现的。
例如:

GET /索引库名称/_search
{
  "query": {
    "match": {
      “title”: “手机“     #查询的关键字
    }
  },
  "highlight": {
    “pre_tags”: “<em>”,         #CSS的标签
    "post_tags": "</em>",    #CSS的标签
    "fields": {
      “title”: {}      # 要高亮的域
    }
  }
}

聚合

为了方便我们对数据的统计和分析,我们可以使用某种方式对数据进行分组,每一组数据在Elasticsearch中都称为一个桶。

聚合为桶
GET /car/_search
{
  "size": 0,
  "aggs": {
    "popular_colors": {
      "terms": {
        "field": "color"
      }
    }
  }
}

size: 查询条数,这里设置为0,因为我们不关心搜索到的数据,只关心聚合结果,提高效率
aggs:声明这是一个聚合查询,是aggregations的缩写
popular_colors:给这次聚合起一个名字,可任意指定。
terms:聚合的类型,这里选择terms,是根据词条内容(这里是颜色)划分
field:划分桶时依赖的字段

桶内度量

分组完成以后,我们都会对组中的数据进行运算。比如求平均值等等,这就是桶内度量。

GET /car/_search
{
  "size": 0,
  "aggs": {
    "popular_colors": {
      "terms": {
        "field": "color"
      },
      "aggs": {
        "avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}

aggs:我们在上一个aggs(popular_colors)中添加新的aggs。可见度量也是一个聚合
avg_price:聚合的名称
avg:度量的类型,这里是求平均值
field:度量运算的字段