野生程序员 野生程序员

               流年,长短皆逝 浮生,往来皆客。  

目录
文档操作(ES系列详解-重点)
/  

文档操作(ES系列详解-重点)

搜索

GET /yscxy/user/_search?q=name:"野生程序员2"

image.png

image.png分值越高,也就意味着匹配度越高!也就是权重

复杂查询



GET /yscxy/user/_search
{
  "query":{
    "match": {
      "name": "野生小子"
    }
  
  },
  "_source":["name","tags"]  #自定义查询参数
}

排序

GET /yscxy/user/_search
{
  "query":{
    "match": {
      "name": "野生小子"
    }
  
  },
  "_source":["name","age"],
  "sort":[                    #通过哪个字段进行排序
      {
        "age":"asc"
      }
    ]
}

分页

GET /yscxy/user/_search
{
  "query":{
    "match": {
      "name": "野生小子"
    }
  
  },
  "_source":["name","age"],
  "sort":[
      {
        "age":"asc"
      }
    ],
    "from":0,            #从第几条开始
    "size":1		#返回多少条数据
}

image.png

当然数据的下标也是从0开始的

布尔值查询

mast命令,类似mysql中的and

GET /yscxy/user/_search
{
  "query":{
   "bool":{
     "must": [
       {
         "match": {
           "name": "野生程序员"
         }
       },
        {
          "match": {
           "age": 3
         }
        }
     ]
   }
  }
}

image.png

上面也就是多条件查询!

should相当于or,两个条件满足一个就好了

GET /yscxy/user/_search
{
  "query":{
   "bool":{
     "should": [
       {
         "match": {
           "name": "野生程序员"
         }
       },
        {
          "match": {
           "age": 3
         }
        }
     ]
   }
  }
}

must_not 也就是非 相当于not

GET /yscxy/user/_search
{
  "query":{
   "bool":{
     "must_not": [
   
        {
          "match": {
           "age": 23
         }
        }
     ]
   }
  }
}

过滤器

在查询的时候可以,可以使用filter进行数据过滤

GET /yscxy/user/_search
{
  "query":{
   "bool":{
     "must": [
       {
          "match": {
           "name": "野生"
         }
        }
     ],
    "filter": [
      {
        "range":{
         "age":{
           "gte":20
         }
       }
      }
    ]
   }
  }
}

当然也可以这样查询

GET /yscxy/user/_search
{
  "query":{
   "match": {
     "tags": "男 旅游"   #多个条件直接用空格隔离开
   }
  }
}

精确查询

term也就是指定词语进行精确查询,这样性能,效率更加快速

term直接查询精确的

match会使用分词器进行解析(先分析,再通过分析的文档进行查询,利用倒排索引)

两个类型,一个是text,另一个是keyword ,keyword不会被分词器解析的,而text会

下面我们创建文档进行测试

PUT testbdb
{
 "mappings": {
   "properties": {
     "name":{
       "type": "text"
     },
     "desc":{
       "type": "keyword"
     }
   }
 } 
}
PUT testbdb/_doc/1
{
  "name":"野生程序",
  "desc":"java desc"
  
}
PUT testbdb/_doc/2
{
  "name":"野生程序",
  "desc":"java desc2"
  
}

GET testbdb/_search
{
  "query": {
    "term": {
      "desc": "java desc"
    }
  }
}

image.png

可以看到,类型为keeyword 的字段并没有被分词器进行解析

高亮查询

GET /yscxy/user/_search
{
  "query":{
    "match": {
      "name": "野生"
    }
  },
  "highlight":{
    "fields": {
      "name": {}
    }
  }
}

查询结果

image.png

自定义样式

GET /yscxy/user/_search
{
  "query":{
    "match": {
      "name": "野生"
    }
  },
  "highlight":{
    "pre_tags": "<p class-'key' style-'color:red'> ",
    "post_tags": "</p>", 
    "fields": {
      "name": {}
    }
  }
}

image.png


标题:文档操作(ES系列详解-重点)
作者:野生程序员
地址:http://www.yscxy.net/articles/2020/11/10/1605019145726.html