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是如何 ...
随机推荐
- springboot集成支付宝的支付(easy版)
SpringBoot对接支付宝 需要先注册账号 到支付宝开发者平台创建网页支付应用 启用公钥模式 需要使用到appId和下面的两个秘钥 写配置信息的代码 1.引入依赖 <dependency&g ...
- 钉钉dingtalk=6.3.5版本RCE复现
看到网上公开了钉钉RCE的利用方式,第一时间来复现一下. 钉钉dingtalk=6.3.5版本RCE复现 免责声明: 影响版本: 漏洞POC: 漏洞复现: 存在漏洞版本下载地址: 免责声明: 本文章仅 ...
- 2022春每日一题:Day 19
题目:吃奶酪 状压dp实现,dp[i][j]表示走过状态i,停到了j的位置的最小价值.枚举状态,起点终点,转移dp[i][j]=min{dp[i-(1<<s)][k]+dis(s,k)} ...
- 自学 TypeScript 第二天 编译选项
前言: 昨天我们学习了 TS 的数据类型,不知道大家回去以后练习没练习,如果你练习了一定会发现一个问题,我们的 TS 好像和 JS 不太一样 JS 写完之后直接就可以放到页面上,就可以用了,而我们的 ...
- (GCC) C++代码中使用#pragma GCC optimize / #pragma G++ optimize
科学计算用优化 经过实验证明这个命令优化效果最好,把我的 1.2S 的 FFT 优化到了 0.4S使用 pragma 命令优化程序: #pragma GCC optimize("Ofast, ...
- 《Hierarchical Text-Conditional Image Generation with CLIP Latents》阅读笔记
概括 模型总述 本篇论文主要介绍DALL·E 2模型,它是OpenAI在2022年4月推出的一款模型,OpenAI在2021年1月推出了DALL·E模型,2021年年底推出了GLIDE模型. DALL ...
- Linux deb系统 nginx 配置解析php
如果你是root用户可以不加sudo 首先安装php php-fpm nginx sudo apt-get install php php-fpm nginx -y nginx 是一个轻量级的http ...
- Windows及eclipse常用快捷键-小彤在努力
Windows快捷键 Ctrl+A:全选 Ctrl+S:保存 Ctrl+Z:撤回 Ctrl+X:剪切 Ctrl+C:复制 Ctrl+V:粘贴 Ctrl+F:查找 Windows+E:打开我的电脑 Al ...
- 想做长期的 AB 实验?快来看看这些坑你踩了没
作者:江颢 1.什么是长期的 AB 实验 大部分情况下,我们做的 AB 实验都是短期的,一到两周或者一个月之内的,通过分析这段时期内测得的实验效应得出实验结论,并最终进行推广. 长期实验即运行时间达数 ...
- 用Python来写个小型购物车程序
0x1 前言 Python语言能做很多东西的,像数据分析啊.自动化.开发. 爬虫(真的很棒哟,初学者玩很有成就感的啊哈哈)等等还有挺多. 0x2 用Python编写的一个小型购物车程序 import ...