ElasticSearch_03_ES的基本筛选条件

Posted 毛奇志

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch_03_ES的基本筛选条件相关的知识,希望对你有一定的参考价值。

系列文章目录

文章目录


前言

一、基本语法使用

1.1 _search接口获取所有数据

_search这个GET类型的接口,不需要params和body,可以查询整个es所有的数据

took:耗费了几毫秒

timed_out:是否超时,false是没有,默认无timeout

_shards:shards fail的条件(primary和replica全部挂掉),不影响其他shard。默认情况下来说,一个搜索请求,会打到一个index的所有primary shard上去,当然了,每个primary shard都可能会有一个或多个replic shard,所以请求也可以到primary shard的其中一个replica shard上去。

hits 返回es存放的所有的数据
hits.total:本次搜索,返回了几条结果
hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
hits.hits:包含了匹配搜索的document的详细数据,默认查询前10条数据,按_score降序排序

1.2 文档操作

插入文档

PUT /ecommerce/product/1

    "name" : "gaolujie yagao",
    "desc" :  "gaoxiao meibai",
    "price" :  30,
    "producer" :      "gaolujie producer",
    "tags": [ "meibai", "fangzhu" ]

PUT /ecommerce/product/2

    "name" : "jiajieshi yagao",
    "desc" :  "youxiao fangzhu",
    "price" :  25,
    "producer" :      "jiajieshi producer",
    "tags": [ "fangzhu" ]

PUT /ecommerce/product/3

    "name" : "zhonghua yagao",
    "desc" :  "caoben zhiwu",
    "price" :  40,
    "producer" :      "zhonghua producer",
    "tags": [ "qingxin" ]

PUT /ecommerce/product/1 表示的含义:ecommerce 电子商务是索引名称,product 产品是type类型名称,最后 1 表示序号

查询文档

GET /ecommerce/product/1

url 相同,只是 请求类型 改成了 GET,符合 restful 风格

修改文档

PUT /ecommerce/product/1

    "name" : "jiaqiangban gaolujie yagao",
    "desc" :  "gaoxiao meibai",
    "price" :  30,
    "producer" :      "gaolujie producer",
    "tags": [ "meibai", "fangzhu" ]

url 相同,只是 请求类型 改成了 PUT,符合 restful 风格

修改文档底层原理:

  1. 修改本质是删除:es会将老的document标记为deleted(逻辑删除),然后新增我们给定的一个document,当我们创建越来越多的document的时候,es会在适当的时机在后台自动删除(物理删除)标记为deleted的document。
  2. 各个filed均替换(删除旧的,新建新的):document是不可变的,如果要修改document的内容,可以通过全量替换,直接对document重新建立索引,替换里面所有的内容。而且,替换必须带上所有的field,即使这个filed的值和之前相同,也要带上,否则其他数据会丢失。

查询所有的索引和查询所有的数据

GET _cat/indices?v&pretty
GET _search


删除文档

注意:在删除一个document之后,我们可以从侧面证明,它不是立即物理删除的,因为它的一些版本号等信息还是保留的。

删除之后,这里表示只剩下两个了,序号为1的没有了

二、各种各样的查询条件

2.1 查询所有

GET /ecommerce/product/_search

  "query":  "match_all":  

2.2 值匹配和输出结构按price倒序输出

GET /ecommerce/product/_search

    "query" : 
        "match" : 
            "name" : "yagao"
        
    ,
    "sort": [
         "price": "desc" 
    ]

2.3 仅输出需要的数量

GET /ecommerce/product/_search

  "query":  "match_all":  ,
  "from": 1,
  "size": 1

2.4 仅输出需要的字段

GET /ecommerce/product/_search

  "query":  "match_all":  ,
  "_source": ["name", "price"]

2.5 值匹配和范围匹配

GET /ecommerce/product/_search

    "query" : 
        "bool" : 
            "must" : 
                "match" : 
                    "name" : "yagao" 
                
            ,
            "filter" : 
                "range" : 
                    "price" :  "gt" : 25  
                
            
        
    

2.6 match表示空格分词中任意一个匹配

1、全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回
2、phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回

GET /ecommerce/product/_search

    "query" : 
        "match" : 
            "producer" : "yagao producer"
        
    

2.7 match_phrase表示整个字符串完全匹配上

GET /ecommerce/product/_search

    "query" : 
        "match_phrase" : 
            "producer" : "yagao producer"
        
    


GET /ecommerce/product/_search

    "query" : 
        "match_phrase" : 
            "producer" : "zhonghua producer"
        
    

2.8 三种匹配强度must should must_not

GET /ecommerce/_search

  "query": 
    "bool": 
      "must": [
        
          "match": 
            "name": "yagao"
          
        
      ],
      "should": [
        
          "match": 
            "desc": "fangzhu"
          
        ,
        
          "match": 
            "desc": "caoben"
          
        
      ],
      "must_not": [
        
          "match": 
            "price": 25
          
        
      ],
     "minimum_should_match": 1
    
  

总结

对比学习法一种很快的学习方法,es的查询语句可以对比mysql的来学习

倒序输出,类似mysql的 order by xxx desc
限制输出数量,类似mysql的 limit xxx
仅输出需要的字段,类似mysql的 select filed1,filed2
值匹配和范围匹配,类似mysql的 where filed = xxx and num_bak > xxx
分词匹配 match
全值匹配 match_phrase
三个匹配强度 must should must not

以上是关于ElasticSearch_03_ES的基本筛选条件的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch_03_ES的基本筛选条件

ElasticSearch_02_ES的基本筛选条件

架构师成长记_第八周_03_ Centos安装 ElasticSearch 可视化插件: es-header

架构师成长记_第八周_20_Elasticsearch 集群构建

架构师成长记_第八周_20_Elasticsearch 集群构建

架构师成长记_第八周_20_Elasticsearch 集群构建