elasticsearch的学习和使用——DSL学习

elasticsearch的学习和使用——DSL学习

Scroll Down

elasticsearch的学习和使用——DSL学习

elasticsearch的DSL是基于REST的JSON格式内容,相当于数据库的SQL语言,主要用来将数据内容进行模型化构建的搜索
以下内容基于

elasticsearch 6.3.0

1.基本的语法

1.新增一个索引(库)

PUT /test
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  }
}

number_of_shards:索引对应的分片数据(主)
number_of_replicas:索引对应的备份数据(副)
2.对字段的增删改查

//删除索引
DELETE test
//创建字段--不带类型
PUT /test/_doc/2
{
  "name":"xiaopengpeng",
  "sex":"woman",
  "age":24
}
//更新字段--覆盖更新
POST /test/_doc/1
{
  "doc":{
     "name":"xpp"
  }
}
//查询字段
GET /test/_doc/1
//更新字段--不覆盖更新
POST /test/_doc/1/_update
{
   "doc":{
     "name":"xpp"
  }
 
}
//删除字段
DELETE  /test/_doc/1
//创建字段  存在id为1的就创建失败
POST /test/_doc/1/_create
{
   "doc":{
     "name":"xpp"
  }
 
}
//查询test索引下的索引内容
GET /test/_doc/_search
//查询test索引下的索引内容--不带条件
GET /test/_search
{
  "query": {
    "match_all": {}
  }
}

2.查询语法

1.match和term

match会对要搜索的内容进行分词在进行匹配,
match会对搜索的词进行分词查询,match默认使用的是or的条件进行查询,可以支持最小词匹配,默认是1,支持短语查询
term,会对搜索的词不进行分词查询
语法:

GET /test/_doc/_search
{
  "query":{
    "match": {
      "name": "张三"
    }
  }
}

2.排序

sort关键字 里面传入需要排序的值与顺序

GET /test/_doc/_search
{
  "query":{
    "match": {
      "name": "张三"
    }
  },
  "sort":
  [
    {"age":{"order":"asc"}}
    ]
}

3.分页

from:从第几条开始
size:取多少条

GET /test/_doc/_search
{
   "query":{
    "match": {
      "name": "张三"
    }
  },
  "from":0,
  "size":1
}

4.filter

filter相当于SQL中的where,必须放在bool中
其中term是精确匹配(不分词),而match是分词的,且filter不会打分

GET /test/_doc/_search
{
  "query":{
    "bool": {
       "filter": [
         {
            "term": {"age":24}
         }
         ]
    }
  }
}

GET /test/_doc/_search
{
  "query":{
    "bool": {
       "filter": [
         {
            "match":{"name":"张三"}
         }
         ]
    }
  }
}

4.聚合

aggs相当于SQL中的group by

GET /test/_doc/_search
{
 "query":{
   "match": {
     "name":"张三"
   }
 },
 "aggs":{
   "grouo_by_age":{
     "terms":{
       "field": "age"
     }
   }
 }
}

5.分析查询语句与字段类型

analyze的分词过程:字符过滤(过滤特殊符号加量词)---->字符处理---->分词过滤(分词转换,去除复数之类)

GET /test/_analyze
{
  "field":"name",
  "text":"we are family"
}

字段类型:

text:被分析索引的字符串类型
keyword:不能被分析只能精确匹配的字符串类型
date:日期类型,可以配合format一起使用
数字类型:long,interger,short,double
布尔类型
Array
object类型
IP类型