ES的基本语法
1 基本使用
使用kibaba来执行语句
es安装和kibaba安装:https://www.cnblogs.com/jthr/p/17075759.html
1)添加PUT
已存在会直接覆盖
PUT /myindex/_doc/1
{
"id":1,
"name":"手机",
"price":3888.8,
"desc":"美国有苹果,中国有菠萝"
}
2)修改POST
POST/myindex/_doc/1
{
"id":1,
"name":"手机",
"price":3888.8,
"desc":"美国有苹果,中国有菠萝"
}
3)查询GET
GET /jsnh/user/1/
4)删除DELETE
DELETE /jsnh/user/1/
2 查询
2.1 测试数据准备
PUT /product/_doc/1
{
"name" : "xiaomi phone",
"desc" : "shouji zhong de zhandouji",
"price" : 3999,
"tags": [ "xingjiabi", "fashao", "buka" ]
}
PUT /product/_doc/2
{
"name" : "xiaomi nfc phone",
"desc" : "zhichi quangongneng nfc,shouji zhong de jianjiji",
"price" : 4999,
"tags": [ "xingjiabi", "fashao", "gongjiaoka" ]
} PUT /product/_doc/3
{
"name" : "nfc phone",
"desc" : "shouji zhong de hongzhaji",
"price" : 2999,
"tags": [ "xingjiabi", "fashao", "menjinka" ]
} PUT /product/_doc/4
{
"name" : "xiaomi erji",
"desc" : "erji zhong de huangmenji",
"price" : 999,
"tags": [ "low", "bufangshui", "yinzhicha" ]
} PUT /product/_doc/5
{
"name" : "hongmi erji",
"desc" : "erji zhong de kendeji",
"price" : 399,
"tags": [ "lowbee", "xuhangduan", "zhiliangx" ]
}
2.2 简单查询
1)查询product/_doc下所有
GET /product/_doc/_search
2)简单条件查询
返回name中包含xiaomi或者phone的关键字的
es采取的是关键字查询索引,xiaomi phone会被分词分为 xiaomi和phone,再去查找索引
GET /product/_doc/_search?q=name:xiaomi phone
3)简单条件+分页排序
页码为0,每页为2,安装price排正序
GET /product/_doc/_search?q=name:xiaomi phone&from=0&size=2&sort=price:asc
2.3 复杂查询
2.3.1 查询所有match_all
无条件查询所有
GET /product/_doc/_search
{
"query":{
"match_all": {}
}
}
2.3.2 单字段条件查询match
match会对查询条件进行分词处理,得到一些关键字,然后每个关键字去相等匹配,只要有一个匹配到,就可以返回,再根据相关度排序
返回name中包含xiaomi或者phone关键字的
GET /product/_doc/_search
{
"query":{
"match": {
"name":"xiaomi phone"
}
}
}
2.3.3 多字段条件匹配multi_match
multi_match和match的区别在于,可以对多个字段进行匹配查询
查询name字段或desc字段中包含phone关键字的的,multi_match多个字段单条件去匹配
GET /product/_doc/_search
{
"query":{
"multi_match": {
"query":"phone",
"fields":["name","desc"]
}
}
}
2.3.4 排序sort
GET /product/_doc/_search
{
"query":{
"multi_match": {
"query":"phone",
"fields":["name","desc"]
}
},
"sort":{
"price":"asc"
}
}
2.3.5 指定返回字段
可以指定只返回部分字段,不用全部字段都返回
只返回字段name和price
GET /product/_doc/_search
{
"query":{
"multi_match": {
"query":"phone",
"fields":["name","desc"]
}
},
"sort":{
"price":"asc"
},
"_source":["name","price"]
}
2.3.6 分页
GET /product/_doc/_search
{
"query":{
"multi_match": {
"query":"phone",
"fields":["name","desc"]
}
},
"sort":{
"price":"asc"
},
"_source":["name","price"],
"from":0,
"size":2
}
2.3.7 不分词查询term
查询条件不会被分词,而是整个作为一个关键字去查询
获取name包含关键字xiaomi erji的,由于关键字中没有xiaomi erji,只有xiaomi和erji这两个关键字,所以查不到
GET /product/_doc/_search
{
"query":{
"term": {
"name":"xiaomi erji"
}
},
"sort":{
"price":"asc"
},
"_source":["name","price"],
"from":0,
"size":2
}
2.3.8 不分词查询terms
和term的区别在于,对一个字段可以查询多个条件,满足一个就可以
获取name包含关键字包含xiaomi erji或者phone关键字的
GET /product/_doc/_search
{
"query":{
"terms": {
"name":["hongmi erji","phone"]
}
},
"sort":{
"price":"asc"
},
"_source":["name","price"],
"from":0,
"size":2
}
2.3.9 验证分词会怎么分_analyze
查询字符串"xiaomi nfc zhineng phone huhu"会被分成哪几个关键词
GET /_analyze
{
"analyzer": "standard",
"text":"xiaomi nfc zhineng phone huhu"
}
2.3.10 短语搜索match_phrase
match_phrase还是分词后去搜的
目标文档需要包含分词后的所有关键词
目标文档还要保持这些词的顺序和文档中的一致
添加测试数据
PUT /myindex/_doc/1
{
"id":1,
"name":"手机",
"price":3888.8,
"desc":"USA has apple China has pineapple"
}
PUT /myindex/_doc/2
{
"id":1,
"name":"手机",
"price":3888.8,
"desc":"USA has apple China has pear"
} PUT /myindex/_doc/3
{
"id":1,
"name":"手机",
"price":3888.8,
"desc":"USA has apple China has pear and pineapple"
}
查询
GET /myindex/_search
{
"query":{
"match_phrase":{
"desc":"China has pineapple"
}
}
}
查询结果,只有一条。说明match_phrase是分词后去查询的,且查询的结果必须包含查询条件的这几个关键词,且顺序连续一致
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.6026137,
"hits" : [
{
"_index" : "myindex",
"_type" : "mytype",
"_id" : "1",
"_score" : 0.6026137,
"_source" : {
"id" : 1,
"name" : "手机",
"price" : 3888.8,
"desc" : "USA has apple China has pineapple"
}
}
]
}
}
2.4 组合条件查询bool
bool标识组合条件
2.4.1 must
must标识必须满足的条件
1)查询name中包含xiaomi关键字的并且desc中包含shouji关键字的
{
"query":{
"bool":{
"must":
[
{
"match":{
"name":"xiaomi"
}
},
{
"match":{
"desc":"shouji"
}
}
]
}
}
}
2.4.2 filter
filter也是必须满足的条件,和must的区别是不计相关度分数。
1)查询name包含xiaomi关键字的,desc包含shouji关键字的,price大于4000的(这个条件不参与相关度分数的计算)
GET /product/_doc/_search
{
"query":{
"bool":{
"must":
[
{
"match":{
"name":"xiaomi"
}
},
{
"match":{
"desc":"shouji"
}
}
],
"filter":[
{
"range":{
"price":{
"gt":4000
}
}
}
]
}
}
}
2.4.3 should
相当于or匹配
minimum_should_match表示shoule中的条件有几个必须满足,可以为0。
如果bool查询包含至少一个should子句,而没有must或 filter子句,则默认值为1。否则,默认值为0
1)查询出name包含xiaomi关键字或者desc包含shouji关键字的
GET /product/_doc/_search
{
"query":{
"bool":{
"should":
[
{
"match":{
"name":"xiaomi"
}
},
{
"match":{
"desc":"shouji"
}
}
],
"minimum_should_match":1
}
}
}
2)查询出name包含xiaomi关键字并且desc包含shouji关键字的
GET /product/_doc/_search
{
"query":{
"bool":{
"should":
[
{
"match":{
"name":"xiaomi"
}
},
{
"match":{
"desc":"shouji"
}
}
],
"minimum_should_match":2
}
}
}
3)如下,因为存在must,所以minimum_should_match值为0,相当于should里的条件不存在,也就是查询price大于1999的
GET /product/_doc/_search
{
"query":{
"bool":{
"should":
[
{
"match":{
"name":"xiaomi"
}
},
{
"match":{
"desc":"shouji"
}
}
],
"must":[
{
"range":{
"price":{
"gt":1999
}
}
}
]
}
}
}
4)查询价格大于1999,并且(name包含xiaomi关键字或者desc包含shouji关键字)
GET /product/_doc/_search
{
"query":{
"bool":{
"should":
[
{
"match":{
"name":"xiaomi"
}
},
{
"match":{
"desc":"shouji"
}
}
],
"minimum_should_match":1,
"must":[
{
"range":{
"price":{
"gt":1999
}
}
}
]
}
}
}
5)查询价格大于1999,并且(name包含xiaomi关键字,并且desc包含shouji关键字)
GET /product/_doc/_search
{
"query":{
"bool":{
"should":
[
{
"match":{
"name":"xiaomi"
}
},
{
"match":{
"desc":"shouji"
}
}
],
"minimum_should_match":2,
"must":[
{
"range":{
"price":{
"gt":1999
}
}
}
]
}
}
}
2.4.4 must not
必须不满足,且不计算相关度分数
1)查询价格不能大于4000的,也就是价格小于等于4000的
GET /product/_doc/_search
{
"query":{
"bool":{
"must_not":[
{
"range":{
"price":{
"gt":4000
}
}
}
]
}
}
}
ES的基本语法的更多相关文章
- Node.js 全栈开发(二)——ES 201x 新语法的使用之基础篇
在讲 ES 2015 新语法之前,先来说一下为什么叫 ES.JavaScript 是这门语言的名称,它有一个为它制定标准化的组织 European Computer Manufacturers Ass ...
- ES 6新语法
一.块级作用域绑定 回顾:使用var关键字定义变量 定义 = 声明 + 赋值: 1. 可以一次定义多个变量 2. 定义时可以只声明不赋值 3. 定义之后可以随时修改变量的值 4. 变量声明会被提升 ...
- ES常用查询语法
1.query string search GET /index/type/_search?q=name:zhangsan&sort=age:desc 2.query DSL(Domain S ...
- es聚合查询语法
{ "size": 0, "query": { "bool": { "filter ...
- 009 webpack将ES高级语法进行装换
一:ES高级转换 1.main.js中的js不能解析 // js的主要入口 import $ from 'jquery' import './css/index.css' import './css/ ...
- 前端笔记之ES678&Webpack&Babel(上)初识ES678&Babel&let和const&解构&语法
一.ES版本简介和调试运行方法 1.1 ECMAScript简介 MDN手册:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript JavaS ...
- ES 08 - 创建、查看、修改、删除、关闭Elasticsearch的index
目录 1 创建index(配置mapping[映射]) 2 查看index 3 修改index 4 删除index 5 打开/关闭index 6 常见问题及解决方法 index相当于RDBMS(关系型 ...
- 47.serch基本语法
主要知识点 1._search api基本语法 2.http协议中get请求带上request body 一.search api的基本语法 1.GET /_search {所传递的参 ...
- ES 调优查询亿级数据毫秒级返回!怎么做到的?--文件系统缓存
一道面试题的引入: 如果面试的时候碰到这样一个面试题:ElasticSearch(以下简称ES) 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因 ...
- es相关
1.es在数据量很大的情况下(数十亿级别)如何提高查询性能啊? 2.es生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片? 3.es的分布式架构原理能说一下么(es是如何 ...
随机推荐
- 不一样的纯H5C3动画爱心
最近抖音很火的让你会计算机的朋友给你做个爱心突然火了,我也不出意外的收到了朋友的邀请,自己做肯定太麻烦了于是乎百度第一步,惊呆了!网上全都是一个爱心,变着法的火焰爱心,换汤不换药,那我们肯定是要整点不 ...
- 基于实战的Burp Suite插件使用Tips
基于实战的Burp Suite插件使用技巧 本篇文章首发于奇安信攻防社区 目录 基于实战的Burp Suite插件使用技巧 免责声明: 0×00前言 0×01专业版激活 0×02插件的环境安装 0×0 ...
- 2022春每日一题:Day 30
题目:[JSOI2009]电子字典 读完题后,暴力?确实,计算一下时间复杂度最坏情况下,20263*10000=1.5e8,卡一下常可以直接卡到7e7,最严格来说应该卡的过去,但是此题数据可以直接卡过 ...
- Go语言核心36讲47
你好,我是郝林,今天我们继续分享使用os包中的API. 我们在上一篇文章中.从"os.File类型都实现了哪些io包中的接口"这一问题出发,介绍了一系列的相关内容.今天我们继续围绕 ...
- PGL图学习之图神经网络GraphSAGE、GIN图采样算法[系列七]
0. PGL图学习之图神经网络GraphSAGE.GIN图采样算法[系列七] 本项目链接:https://aistudio.baidu.com/aistudio/projectdetail/50619 ...
- bugku 秋名山老司机
看到这个的第一眼怀疑是脚本题,先看看源码 找不到提交点... 抓包 也没有 多刷新几次 弹出了提示信息 用post传入的参数value,其值应该就是计算式的答案 然后直接使用py脚本来快速上传答案值就 ...
- C++初阶(stack+queue)
stack stack介绍 stack是一种先进后出的数据结构,只有一个出口,类似于栈.stack容器哦允许新增元素,移除元素,取得栈顶元素,但是除了最顶端之后,没有任何其他办法可以存取stack的其 ...
- MySQL数据库下载以及启动软件的详细步骤
第一步>>>在浏览器上百度上搜索MySQL 如何判断官网?有官网两个字的或者纯英文解释的大概率就是官网 第二步>>>点击DOWNLOAWDS 第三步>> ...
- Linux创建定时删除日志任务
定时删除3天前的所有日志文件: 1.例:脚本对应的要删除的目录为/home/logs在home目录创建文件clearLogFiles.sh:cd /homevim clearLogFiles.sh写入 ...
- mq中如何保证消息的顺序性
先说结论 不建议在mq当中使用消息的投递顺序来保证消息的顺序一致性 反思为什么需要保留消息的顺序性 日常思维中,顺序大部分情况会和时间关联起来,即时间的先后表示事件的顺序关系.消息队列中的若干消息如果 ...