elasticsearch的dsl查询
测试es的dsl查询,准备数据,在插入数据的时候,如果index、type、mapping都没有,es会自动创建
一、数据的准备
curl -XPOST "http://192.168.99.1:9200/new_index/product/p1" -d'
{
"name":"new Mac Book"
}'
curl -XPOST "http://192.168.99.1:9200/new_index/product/p2" -d'
{
"name":"note book",
"price":12345,
"cats":["notes"]
}'
curl -XPOST "http://192.168.99.1:9200/new_index/product/p3" -d'
{
"name":"apples",
"price":4,
"cats":["fruit"]
}'
curl -XPOST "http://192.168.99.1:9200/new_index/product/p4" -d'
{
"name":"pen",
"price":50
}'
curl -XPOST "http://192.168.99.1:9200/new_index/product/p5?routing=p5" -d'
{
"name":"add document use routing"
}'
curl -XPOST "http://192.168.99.1:9200/new_index/product/p6" -d'
{
"name":"I love apples too.",
"price":60
}'
二、修改name字段的mapping
注意:1、mapping是要在创建索引的时候创建好,已经创建好的field的mapping不可再次修改,但是可以新增field的mapping
2、在es5中,需要设置text类型字段的fielddata=true,不然下方的查询会报错
curl -XPOST "http://192.168.99.1:9200/new_index/_mapping/product" -d'
{
"properties": {
"name":{
"type": "text",
"fielddata": true
}
}
}'
三、查询出price在1-200之间,且name属性中必须不包含pen,按照price降序,name升序,对返回的结果进行分页,_source中的数据进行过滤,返回name字段分词后的term数据
注意:已经分词过的字段不建议排序,耗性能,而且排序也不一定能得到想要的结果
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d'
{
"explain": true,
"from": 0,
"size": 20,
"fielddata_fields" : ["name"],
"_source": {
"include": ["name*","price"],
"exclude": ["name"]
},
"version": true,
"query": {
"bool": {
"must": [
{
"range": {
"price": {
"gte": 1,
"lte": 200
}
}
}
],
"must_not": [
{
"term": {
"name": {
"value": "pen"
}
}
}
]
}
},
"sort": [
{
"price": "desc"
},
{
"name" : {
"order": "asc"
}
}
]
}'
四、统计price在1-200之间,且name属性中必须不包含pen的数据的数量
curl -XGET "http://192.168.99.1:9200/new_index/product/_count" -d'
{
"query": {
"bool": {
"must": [
{
"range": {
"price": {
"gte": 1,
"lte": 200
}
}
}
],
"must_not": [
{
"term": {
"name": {
"value": "pen"
}
}
}
]
}
}
}'
五、查询price在1-200之间,且name属性中必须不包含pen的数据是否存在
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d'
{
"size":0,
"terminate_after":1,
"query": {
"bool": {
"must": [
{
"range": {
"price": {
"gte": 1,
"lte": 200
}
}
}
],
"must_not": [
{
"term": {
"name": {
"value": "pen"
}
}
}
]
}
}
}'
六、查询id为p1,p3,p4的数据
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d'
{
"query": {
"ids": {
"values": ["p1","p2","p3"]
}
}
}'
如果上方的查询url中没有指定type,那么也是可以在ids下方指定type的
七、查询文档中一定包含price字段的文档
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d'
{
"query": {
"exists" : {
"field" : "price"
}
}
}'
八、通配符查询,查询name字段是bo*k这种格式的
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d'
{
"query": {
"wildcard": {
"name": {
"value": "bo*k"
}
}
}
}'
九、query和filter一起结合使用
需求:过滤出price在1-200之间,name中包含apples
注意:1、query查询需要考虑到文档的相关性评分,而filter不需要。
2、filter查询的结果会缓存,速度比query要快
3、一般需要做全文检索的字段或需要考虑到相关度评分的字段使用query查询,其余的可以考虑使用filter过滤。
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d'
{
"query": {
"bool": {
"filter": {
"range": {
"price": {
"gte": 1,
"lte": 200
}
}
},
"must": [
{
"term": {
"name": {
"value": "apples"
}
}
}
]
}
}
}'
十、match匹配查询
operator:
and : 表示query中的数据分词后的都需要匹配上。
or : 表示query中的数据分词后任意一个匹配上即可。(默认)
minimum_should_match : 里面的值写百分比,即query中的词分词后,满足minimum_should_match这个里面的百分比即可。默认最少需要匹配一个。(如果query中的词可以分成3个term,配置的百分比为80%,那么3*0.8最终需要匹配2个)
十一、multi_match查询,从多个字段中查询
注意:fields中写的是多个字段
type 的值有多个,不同的值会影响文档的得分
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d'
{
"query": {
"multi_match": {
"query": "apples",
"fields": ["name","descs"],
"type": "best_fields"
}
}
}'
elasticsearch的dsl查询的更多相关文章
- Elasticsearch Query DSL查询入门
本篇为学习DSL时做的笔记,适合ES新手,大佬请略过~ Query DSL又叫查询表达式,是一种非常灵活又富有表现力的查询语言,采用JSON接口的方式实现丰富的查询,并使你的查询语句更灵活.更精确.更 ...
- Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述
目录 引言 概要 Query and filter context Match All Query 全文查询 Full text queries 小结 参考文档 引言 虽然之前做过 elasticse ...
- Elasticsearch文档查询
简单数据集 到目前为止,已经了解了基本知识,现在我们尝试用更逼真的数据集,这儿已经准备好了一份虚构的JSON,关于客户银行账户信息的.每个文档的结构如下: { , , "firstname& ...
- ELK学习笔记(五)简单搜索和DSL查询
检索文档 现在我们有一些数据存储在Elasticsearch中,我们可以开始处理这个应用程序的业务需求. 这在Elasticsearch中很容易.我们只需执行HTTP GET请求并指定文档的地址--索 ...
- Elasticsearch Query DSL
Elasticsearch Query DSL By:授客 QQ:1033553122 1. match_all 1 2. match 2 3. match_phrase 5 4. match_phr ...
- Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了
目录 引言 构建示例 match operator 参数 analyzer lenient 参数 Fuzziness fuzzniess 参数 什么是模糊搜索? Levenshtein Edit Di ...
- Elasticsearch 常用基本查询
安装启动很简单,参考官网步骤:https://www.elastic.co/downloads/elasticsearch 为了介绍Elasticsearch中的不同查询类型,我们将对带有下列字段的文 ...
- ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解
前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...
- Elasticsearch Query DSL(查询语言)
章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...
随机推荐
- 简说yuv
最近弄了一个读取y4m文件转成yuv的流的事情,记录一些yuv相关的细节 为什么会有yuv 因为我们目前的显示器显示的原理都是三原色,几乎所有的视频数据最后都要转为rgb格式才能渲染到显示屏上,而原始 ...
- weblogic从ssrf到redis获取shell
一.环境搭建和知识储备 1.1.影响版本 漏洞编号:CVE-2014-4210 weblogic 10.0.2.0 weblogic 10.3.6.0 1.2.Docker搭建环境 1.进入vulhu ...
- Spirit带你彻底了解事件捕获和冒泡机制
Dom标准事件模型 在Dom标准事件模型中,事件是先进行捕获,达到目标阶段时,在进行冒泡的 捕获阶段==>目标阶段==>冒泡阶段 目标元素和非目标元素 在介绍事件捕获和事件冒泡前 我们先要 ...
- JAVA修饰符优先级先后顺序规范
在实际的开发中,会遇到定义静态常量时,有的人使用的修饰符顺序不一致,例如 ... static final ... 或者 ... final static ... 于是找到了下规范,分享下 优先级 修 ...
- Django学习day03随堂笔记
每日测验 """ 今日考题 1.什么是静态文件,django静态文件配置如何配置,如何解决接口前缀不断变化,html页面上路径的引用需要反复修改的问题 2.request ...
- 深入HTML5第三天
表单form属性:method="get|post" action="url": 特性:不写样式是没有样式的 input:属性:type="text| ...
- Python Type Hints(类型提示)
在做自动化测试的时候,改进测试框架,类型提示会让你写代码时更加流程,当你在一个模块定义了类型,而其他模块没有提示的时候,是相当不方便.
- 解决samba和SELINUX 冲突
在使用Samba进行建立Window与Linux共享时,要是不能访问,出现"您可能没有权限使用网络资源", 那就是SELinux在作怪了 要是想让共享目录能访问,可以使用命令 #s ...
- iMAC_使用相关
MAC软件下载 https://www.macwk.com/ 这是网站是一个下载免费软件的网站,下载通过<天翼云盘>下载,这个天翼云盘下载的快 好用的软件推荐 腾讯柠檬(Tencent L ...
- 2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)
前言 依旧是白嫖账号,只打了一些题/kk 正题 1002 Buying Snacks 题目大意 \(n\)个物品,每个可以买一次也可以不买,如果买需要选择\(1/2\)块钱的,然后也可以相邻两个一起买 ...