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 ...
随机推荐
- unity渲染篇:烘焙模型贴图
今天要来做一件有趣的事情,那就是把一个模型数据烘焙到贴图上! 什么意思?就是下面酱紫,把这只小喵从第一张图拍扁,变成第二张图的样子(似乎有点残忍~) 可能你经常会从美术那边听到"烘焙光照贴图 ...
- 《openssl编程》:第一章基础知识
第一章 基础知识 1.1 对称算法 对称算法使用一个密钥.给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同.解密时,使用读密钥与加密密钥相同. 对称算法主要有四种加密模式: (1) 电子密码 ...
- SparkPi的编程计算
Pi的计算方式有很多,本文主要是通过Spark在概论统计的方法对Pi进行求解: 算法说明: 在边长为R的正方形中,其面积为R^2,而其内接圆的面积为pi * R^2 /4 ,圆的面积与正方形的面积比为 ...
- Hello Wolrd
这是一篇测试文章.....后续会更新一些文章.
- Django学习day15BBS项目开发2.0
每日测验 """ 今日日考 1.img标签src属性可以指代的值有哪些,各有什么特点 2.pillow模块是干什么用的,主要的方法有哪些 3.简述登陆功能图片验证码相关逻 ...
- 虚拟机乌班图系统安装 VMware tools 工具
在VMware虚拟机中安装完毕Linux操作系统之后,我们经常会发现桌面不能全屏显示或者windows主机系统与linux操作系统之间无法创建共享文件夹.这是因为我们还没有安装VMware tools ...
- 真机连接电脑后,adb devices显示为空-解决方案
真机:小米6x,adb版本 真机连接电脑后,在cmd中输入adb devices,显示为空. 原因是真机没开启开发者选项和USB调试. 解决方案: 手机的[设置]-[我的设备]-[全部参数],多次点击 ...
- whistle浏览器抓包(以火狐浏览器为例)
环境:whistle:1.14.6 whistle浏览器抓包 以火狐浏览器为例 1.启动whistle 使用w2 start启动whistle. 退出cmd后,whistle自动关闭了,所以每次使用w ...
- 定要过python二级 选择第3套
1 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. . 13. 14. 15. 16. 17. (1)说明了一个问题 所谓的方向是从左到右还是从右到左 是看的是步长 步长的 ...
- P3214-[HNOI2011]卡农【dp】
正题 题目链接:https://www.luogu.com.cn/problem/P3214 题目大意 一个由\(1\sim n\)的所有整数构成的集合\(S\),求出它的\(m\)个不同非空子集满足 ...