首页 > 其他分享 >【ES HTTP-高级查询 02】

【ES HTTP-高级查询 02】

时间:2023-02-01 18:45:37浏览次数:66  
标签:02 HTTP name 查询 ES student query match 请求

一、高级查询

Elasticsearch提供了基于JSON完整的DSL来定义查询

# 构造数据-供后续各种复杂的查询做准备

# POST /student/_doc/1001
{
    "name": "zhangsan",
    "nickname": "zhangsan",
    "sex": "男",
    "age": 30
}
# POST /student/_doc/1002
{
    "name": "lisi",
    "nickname": "lisi",
    "sex": "男",
    "age": 20
}
# POST /student/_doc/1003
{
    "name": "wangwu",
    "nickname": "wangwu",
    "sex": "女",
    "age": 40
}
# POST /student/_doc/1004
{
    "name": "zhangsan1",
    "nickname": "zhangsan1",
    "sex": "女",
    "age": 50
}
# POST /student/_doc/1005
{
    "name": "zhangsan2",
    "nickname": "zhangsan2",
    "sex": "女",
    "age": 30
}

1、查询所有文档-match_all

发送GET请求:{{es_url}}/student/_search

 

//请求体信息
{
    "query":{
        "match_all":{}
    }
}

/*
query:代表一个查询对象,里面可以有不同的查询属性
match_all:查询类型,
    例如:match_all:代表查询所有
         match:根据一个字段查询 
         multi_match:根据多个字段查询,参与查询的字段越多,性能越差
         term:精准查询,输入值必须与此条内容保持一致
         range:用于查询范围:价格日期等
*/                    

 

备注:查询所有数据可以有请求体信息也可以没有直接发送接口

DSL查询语法 可参考https://blog.csdn.net/K_zibeng/article/details/126970214

 

 

 

 

 

 

2、匹配查询-match(即:全文检索查询)-->利用分词器对用户输入内容分词,在倒排索引库中进行匹配

match根据一个字段查询,会把查询条件进行分词,然后进行查询,多个分词之间是or的关系

发送GET请求:{{es_url}}/student/_search

//请求体
{
    "query":{
        "match":{
            "name":"zhangsan"
        }
    }
}

 

 

3、字段匹配查询-multi_match

multi_match与match类似,不同的是它可以多个字段查询

发送GET请求:{{es_url}}/student/_search

//请求体
{
    "query":{
        "multi_match":{
            "query":"lisi", //查询对象
            "fields":["name","nickname"] //具体查询的字段
        }
    }
}

 

 

4、关键字精确查询 -term

term查询,精确的关键词匹配查询,不对查询条件进行分词

发送GET请求:{{es_url}}/student/_search

//请求体
{
    "query":{
        "term":{
            "name":{ //查询字段
                "value":"zhangsan" //查询的值
            }
        }
    }
}

 

 

5、多关键字精确查询-terms

terms查询和term查询一样,但它允许你指定多值进行匹配。如果这个字段包含了指定值的任何一个值,那么这个文档满足条件,类似MySQL种的in

发送GET请求:{{es_url}}/student/_search

 

 

6、指定查询字段-_source

默认情况下,Elasticsearch在搜索的结果中,会把文档中保存在_source的所有字段都返回。如果我们只想获取其中的部分字段,我们可以添加_source的过滤

发送GET请求:{{es_url}}/student/_search

 

//请求体
{
    "_source":["name","nickname"],
    "query":{
        "terms":{
            "name":["zhangsan","wangwu"]
        }
    }
}

 

7、过滤字段-_source-includes/excludes

 

 

可以通过:includes来指定想要显示的字段/excludes来指定不想要显示的字段

发送GET请求:{{es_url}}/student/_search

//includes的请求体
{
    "_source":{
        "includes":["name","nickname"] //显示name、nickname
    },
    "query":{
        "terms":{
            "name":["zhangsan","wangwu"]
        }
    }
}
//excludes的请求体
{
    "_source":{
        "excludes":["name","nickname"] //不显示name、nickname
    },
    "query":{
        "terms":{
            "name":["zhangsan","wangwu"]
        }
    }
}

 

 

8

 

 8、组合查询-bool-must/must_not/should

 

bool把各种其他查询通过must(必须)、must_not(必须不)、should(应该)的方式进行组合

发送GET请求:{{es_url}}/student/_search

//请求体:
{
    "query":{
        "bool":{
            "must":[
                {
                    "match":{
                        "name":"zhangsan"
                    }
                }
            ],
            "must_not":[
                {
                    "match":{
                        "age":40
                    }
                }
            ],
            "should":[
                {
                    "match":{
                        "sex":"男"
                    }
                }
            ]
        }
    }
}

 

9、范围查询-range

range查询找出那些落在指定区间内的数字或者时间。range查询允许以下字符

 

发送GET请求:{{es_url}}/student/_search

 

//请求体-查询年龄大于等于30小于等于45的数据
{
    "query":{
        "range":{
            "age":{
                "gte":30, //大于等于30
                "lte":45 //小于等于45
            }
        }
    }
}

 

 

10、模糊查询-fuzzy

 

返回包含与搜索字词相似的文档,为了找到相似的术语,fuzzy查询会在指定的编辑距离内创建一组搜索词的所有可能的变体或扩展。然

 

标签:02,HTTP,name,查询,ES,student,query,match,请求
From: https://www.cnblogs.com/frankruby/p/17083842.html

相关文章

  • NOI2022冒泡排序
    首先考虑A性质的点。区间最小值为\(1\)的限制等价于要求区间所有值为\(1\)。另外一种限制等价于区间不全为\(1\)。把一定是\(1\)的做一个区间覆盖。其他部分暂且......
  • Put Marbles in Bags
    PutMarblesinBagsYouhave k bags.Youaregivena0-indexed integerarray weights where weights[i] istheweightofthe ith marble.Youarealsogi......
  • python3 测试框架pytest入门
    1、安装pytest2、安装html插件3、编写测试用例4、执行测试5、生成测试报告1.1安装pytestpip3installpytest执行该命令安装pytest1.2验证安装pytest-V查看当前已安装......
  • 2022下半年盘点:国产数据库重大更新及技术要点汇总
    2022下半年行业回顾云原生、分布式发展如火如荼2022年,数据库行业发展迅速,并呈现出若干鲜明特点。各数据库厂商及产品均取得长足进步,在部分重点技术领域有所突破,其中以国产......
  • 2023年浏览器哪个好用速度快,这6款没让人失望
    在网络覆盖的社会,不管走到哪里,都能上网浏览新闻、看热点资讯。浏览器是用户上网浏览的必要软件之一,它决定这用户浏览网页的速度和习惯。那么,2023年什么浏览器好用稳定速度......
  • Educational Codeforces Round 135 (Rated for Div. 2) F. Fishermen 二分图最小带权
    不用真的建图,真的建图两人之间的代价不好算。等价转化为对给定的ai找出bi,使得bi=k*a[i],且互不相同k的上界为n,简易证明:[若a[i]互不相等,全部选a[i]*n会比a[i]*(n+1)更好;......
  • CatCTF 2022 BugCat复现
    CatCTF2022BugCat复现脱壳拿到题目,发现题目是套了壳子的,经过检查发现是UPX改,使用x32dbg进行调试,在TLS回调中过掉下图所示的对start函数头部是否存在断点的检测。......
  • detectron2 The detected CUDA version mismatches 错误
    我的报错信息ThedetectedCUDAversion(9.1)mismatchestheversionthatwasusedtocompilePyTorch(11.3).PleasemakesuretousethesameCUDAversions.h......
  • 盘点HTTP的四种认证方式
    HTTP/1.1使用的认证方式有下面四种。1、BASIC认证BASIC认证(基本认证)是从HTTP/1.0就定义的认证方式。即便是现在仍有一部分的网站会使用这种认证方式。是Web服务器与通信客户......
  • 转载 Nginx 一个高性能的HTTP和反向代理服务器
    本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解过,欢迎留言交流。......