测试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查询的更多相关文章

  1. Elasticsearch Query DSL查询入门

    本篇为学习DSL时做的笔记,适合ES新手,大佬请略过~ Query DSL又叫查询表达式,是一种非常灵活又富有表现力的查询语言,采用JSON接口的方式实现丰富的查询,并使你的查询语句更灵活.更精确.更 ...

  2. Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述

    目录 引言 概要 Query and filter context Match All Query 全文查询 Full text queries 小结 参考文档 引言 虽然之前做过 elasticse ...

  3. Elasticsearch文档查询

    简单数据集 到目前为止,已经了解了基本知识,现在我们尝试用更逼真的数据集,这儿已经准备好了一份虚构的JSON,关于客户银行账户信息的.每个文档的结构如下: { , , "firstname& ...

  4. ELK学习笔记(五)简单搜索和DSL查询

    检索文档 现在我们有一些数据存储在Elasticsearch中,我们可以开始处理这个应用程序的业务需求. 这在Elasticsearch中很容易.我们只需执行HTTP GET请求并指定文档的地址--索 ...

  5. Elasticsearch Query DSL

    Elasticsearch Query DSL By:授客 QQ:1033553122 1. match_all 1 2. match 2 3. match_phrase 5 4. match_phr ...

  6. Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了

    目录 引言 构建示例 match operator 参数 analyzer lenient 参数 Fuzziness fuzzniess 参数 什么是模糊搜索? Levenshtein Edit Di ...

  7. Elasticsearch 常用基本查询

    安装启动很简单,参考官网步骤:https://www.elastic.co/downloads/elasticsearch 为了介绍Elasticsearch中的不同查询类型,我们将对带有下列字段的文 ...

  8. ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解

    前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...

  9. Elasticsearch Query DSL(查询语言)

    章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...

随机推荐

  1. unity渲染篇:烘焙模型贴图

    今天要来做一件有趣的事情,那就是把一个模型数据烘焙到贴图上! 什么意思?就是下面酱紫,把这只小喵从第一张图拍扁,变成第二张图的样子(似乎有点残忍~) 可能你经常会从美术那边听到"烘焙光照贴图 ...

  2. 《openssl编程》:第一章基础知识

    第一章 基础知识 1.1 对称算法 对称算法使用一个密钥.给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同.解密时,使用读密钥与加密密钥相同. 对称算法主要有四种加密模式: (1) 电子密码 ...

  3. SparkPi的编程计算

    Pi的计算方式有很多,本文主要是通过Spark在概论统计的方法对Pi进行求解: 算法说明: 在边长为R的正方形中,其面积为R^2,而其内接圆的面积为pi * R^2 /4 ,圆的面积与正方形的面积比为 ...

  4. Hello Wolrd

    这是一篇测试文章.....后续会更新一些文章.

  5. Django学习day15BBS项目开发2.0

    每日测验 """ 今日日考 1.img标签src属性可以指代的值有哪些,各有什么特点 2.pillow模块是干什么用的,主要的方法有哪些 3.简述登陆功能图片验证码相关逻 ...

  6. 虚拟机乌班图系统安装 VMware tools 工具

    在VMware虚拟机中安装完毕Linux操作系统之后,我们经常会发现桌面不能全屏显示或者windows主机系统与linux操作系统之间无法创建共享文件夹.这是因为我们还没有安装VMware tools ...

  7. 真机连接电脑后,adb devices显示为空-解决方案

    真机:小米6x,adb版本 真机连接电脑后,在cmd中输入adb devices,显示为空. 原因是真机没开启开发者选项和USB调试. 解决方案: 手机的[设置]-[我的设备]-[全部参数],多次点击 ...

  8. whistle浏览器抓包(以火狐浏览器为例)

    环境:whistle:1.14.6 whistle浏览器抓包 以火狐浏览器为例 1.启动whistle 使用w2 start启动whistle. 退出cmd后,whistle自动关闭了,所以每次使用w ...

  9. 定要过python二级 选择第3套

    1 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. . 13. 14. 15. 16. 17. (1)说明了一个问题 所谓的方向是从左到右还是从右到左  是看的是步长  步长的 ...

  10. P3214-[HNOI2011]卡农【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P3214 题目大意 一个由\(1\sim n\)的所有整数构成的集合\(S\),求出它的\(m\)个不同非空子集满足 ...