Elasticsearch学习系列之term和match查询 Elasticsearch查询模式

2023-10-29

Elasticsearch查询模式

一种是像传递URL参数一样去传递查询语句,被称为简单查询

GET /library/books/_search //查询index为library,type为books的全部内容
GET /library/books/_search?q=price:10 //查询index为library,type为books中price等于10的

另一种是DSL语句来进行查询,被称为DSL查询,term和match就属于DSL

term查询

term是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇

格式

GET /library/books/_search       #这里是变化的,指定index和type;(比如说index为library,type为books)
{
  "query": {
    "term": {
        "key": "value"              #这里是变化的,比如说查询title等于elasticsearch的内容
      }
    }
}

实例1:查询index为library,type为books重title等于elasticsearch的内容

GET /library/books/_search
{
  "query": {
    "term": {
        "title": "elasticsearch"
    }
  }
}

match查询

match和term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程

match查询相当于模糊匹配,只包含其中一部分关键词就行

格式

GET /library/books/_search 
{
    "query":{
        "match":{
            "key":"value"      
        }
    }
}

实例1:过滤出preview字段中包含"elasticsearch"的索引,并且只显示preview和title字段

GET /library/books/_search 
{
    "fields":["preview","title"]
    "query":{
        "match":{
            "preview":"elasticsearch"      
        }
    }
}

match_all查询

查询指定索引下的所有文档

实例1:过滤出index为library,type为books的所有文档

GET /library/books/_search 
{
    "query":{
        "match_all":{}   
        }                                    
}

实例2:通过match_all过滤出所有字段,然后通过partial在过滤出包含preview的字段和排除title,price的字段

GET /library/books/_search 
{
    "partial_fields":{
        "partial":{
            "include":["preview"],         #包含preview字段的文档
            "exclude":["title,price"]    #排除title,price字段
        },
    "query":{
        "match_all":[]
    }
    }
}

match_phrase查询

短语查询,slop定义的是关键词之间隔多少未知单词

格式

GET /library/books/_search 
{
    "query":{
        "match_phrase" :{
            "query":"Elasticsearch,distributed",
            "slop":2                                 #表示Elasticsearch和distributed之间隔多少单词
        }
    }
}

multi_match查询

可以指定多个字段

实例1:查询title和preview这两个字段都包含Elasticsearch关键词的文档

GET /library/books/_search 
{
    "query":{
        "multi_match":{
            "query":"Elasticsearch"
            "fields":["title","preview"]
        }
    }
}

filter过滤查询

查询同时,通过filter条件在不影响打分的情况下筛选出想要的数据

简单的filter查询

实例1:先查询index为library,type为books的全部文档;再过滤price等于20的

GET /store/products/_search
{
  "query": {
    "filtered":{
        "query":{
            "match_all": {}  #先查询index为store,type
        },
        "filter": {
          "term" :{
              "price":20    #这里是条件,price等于20的
          }
        }
    }
  }
}

filter之bool过滤查询

格式

{
"bool":{
    "must"        : [],
    "should"   : [],
    "must_not" : [],
}
}
#must:条件必须满足,相当于sql语句的and
#should:条件可以满足也可以不满足,相当于sql语句的or
#must_not:条件不需要满足,相当于sql语句的not

实例1:查询价格等于20或者productID等于SD1002136的商品,再排除价格等于30的

GET /store/products/_search
{
  "query": {
    "filtered":{
      "filter":{
        "bool":{
          "should": [
            {"term" : {"price" : 20}},
            {"term" : {"productID" : "SD1002136"}}
          ],
          "must_not": {
            "term" :{"price":30}
          }
        }
      
    }
  }
}
}

filter之and,not,or查询

没有bool,也可以直接使用and,or,not

实例1:and用法,查询价格是10元并且productID又是SD1002136的结果

GET /store/products/_search
{
  "query":{
    "filtered":{
      "filter":{
        "and":[
          {
            "term":{
              "price":10
            }
          },
          {
            "term":{
              "productID":"SD1002136"
            }
          }
          ]
      },
      "query":{
        "match_all": {}
      }
    }
  }
  
}

实例2:or用法,查询价格是10元或者productID是SD4535233的商品

GET /store/products/_search
{
  "query":{
    "filtered":{
      "filter":{
        "or":[
          {
            "term":{
              "price":10
            }
          },
          {
            "term":{
              "productID":"SD4535233"
            }
          }
          ]
      },
      "query":{
        "match_all":{}
      }
    }
  }
}

实例3:not用法,查询productID不是SD1002136的商品

GET /store/products/_search
{
  "query":{
    "filtered":{
      "filter":{
        "not":{
          "term":{
            "productID":"SD1002136"
          }
        }
      },
      "query":{
        "match_all": {}
      }
    }
  }
}

filter之range范围查询

格式

GET /store/products/_search
{
    "query":{
        "filtered":{
            "filter":{
                "range":{
                    "key":{
                        "条件" : value1
                        "条件": value2
                    }
                }
            }
        }
    }
}

条件

gt : 大于
lt : 小于
gte : 大于等于
lte :小于等于

实例1:查询price大于等于20小于等于40的结果

GET /store/products/_search
{
    "query":{
        "filtered":{
            "filter":{
                "range":{
                    "price":{
                        "gte" : 20,
                        "lte" : 40
                    }
                }
            }
        }
    }
}


https://www.cnblogs.com/zhaijunming5/p/6427100.html



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch学习系列之term和match查询 Elasticsearch查询模式 的相关文章

随机推荐

  • 博客转站了~

    由于 CSDN 的博客功能经常有问题 所以把博文站点搬迁到 https www runzhliu cn 欢迎订阅 评论
  • Unity_物体旋转方法归纳

    0 旋转的三种方式 1 矩阵旋转 2 欧拉旋转 会造成万向节锁问题 3 四元数旋转 可避免万向节锁现象 1 方法1 Transform rotation Transform localRotation 旋转角度 void Update if
  • VC获取Unix时间戳

    获取Unix时间戳 std wstring GetUnixTimeStamp void FILETIME ft 0 SYSTEMTIME st 0 ULARGE INTEGER ull 0 GetSystemTime st SystemTi
  • 【数据分析】如何量化时间序列之间的相似性?

    如何量化时间序列之间的相似性 逝者如斯夫 不舍昼夜 时间不会停止 世界上的一切都在不断运动 抛开物理学或哲学的概念不提 几乎所有东西都可以被描述为一系列的事件 对数据更感兴趣的人来说 它们又可以被看做是一系列的测量 这就是我们所说的时间序列
  • 外卖店优先级问题(双指针降低时间复杂度)

    外卖店优先级问题 文章目录 外卖店优先级问题 问题详情 问题分析 1 普通思路 1 1输入储存问题 1 2 遍历存储的数据 1 3遍历 st N 数组 获得最终值 2 双指针 时间复杂度 O n 代码 具体的解析都在注释当中 其中困惑的点都
  • 面试题:InnoDB中一棵B+树能存多少行数据?

    作者 李平 原文地址 www cnblogs com leefreeman p 8315844 html 一 InnoDB一棵B 树可以存放多少行数据 InnoDB一棵B 树可以存放多少行数据 这个问题的简单回答是 约2千万 为什么是这么多
  • 怎么让qt程序在Android系统上运行

    我们都知道支持跨平台是Qt的特点之一 也是比较重要的特点 最近在学习Qt的开发 就在想 它是怎么支持跨平台的呢 我平时的程序都是windows系统下开发和运行 语言用c 那怎么把我用c 写的qt程序运行在android平台上呢 带着这个问题
  • 利用Vulnhub复现漏洞 - Discuz!X ≤3.4 任意文件删除漏洞

    Discuz X 3 4 任意文件删除漏洞 Vulnhub官方复现教程 漏洞原理 复现漏洞 启动环境 漏洞复现 Formhash Cookie 发送数据包 原文 Vulnhub官方复现教程 https vulhub org environm
  • angular.js官方文档的一些说明

    由于angular phonecat那个项目更新了 中文翻译资料很多还是之前版本的 用起来会有问题 自己也碰到一些坑 在此说明下 windows 1 node js官网下载node的安装包 http nodejs org dist v0 1
  • PWN学习---1、基本漏洞-缓冲区溢出

    环境 Ubuntu12 04 32位 一 存在漏洞代码 vuln c include
  • p值小于0.05拒绝还是接受_计算p-值和第二类错误

    专栏里有一篇 两类错误弃真与取假 对显著性水平 P value 第二类错误 功效进行了解释 这里换种行文说 并给出具体计算例子 用来增加对这几个概念的认识和理解 首先我们要清楚我们手上只有一份容量为 的样本 实践中希望通过该份样本进行统计推
  • 老司机教你如何用Unity和Cardboard把3D游戏做成VR游戏

    原网址 随着Oculus宣布1月6日开启预售 2016年很可能成为VR游戏元年 但很多的调研显示 手游设备才是市场增长的关键 SuperData发布的报告显示 2016年全球VR游戏市场规模预计在51亿美元左右 消费者设备安装量在3890万
  • 你一定要知道的那些以太坊术语解释

    block 区块 包含交易 0或多个 父区块 parent hash及其他数据的数据包 在区块链中 除创世区块的每个区块都要包含其父区块的hash 整个区块链包含一个网络的所有交易历史 注意 有些基于区块链的加密货币自称 账本 而非 区块链
  • HashMap底层原理分析

    HashMap的实现原理在Jdk1 7之前底层实现是基于数组 链表的形式 即通过HashMap的key值进行Hash 然后对容量 默认16 负载因子 默认是0 75 进行取余获取到其桶的位置 比如某一个key的hash值是18 容量为为16
  • C语言if语句,for循环相关年月日应用

    文章目录 一 if双分支语句变成单分支语句 1 if单分支语句 2 if双分支语句 3 if双分支语句改成单分支语句 二 采用冒泡排序法对n个数据排序 编写n个元素数组 用冒泡排序法进行排序 三 输入一个年份 判断是不是闰年 1 满足两个条
  • 俞敏洪演讲:创业不需要有钱 只需想着挣钱

    各位朋友大家下午好 上午我坐下面我发现我跟郭凡生郭总很大不同 他认为他自己很聪明 而我恰恰认为自己不聪明 我呢认为自己也不一定笨 他认为他很有吸引力 确实是对三四十岁的中年人来说 郭总很有创业热情 因为这个年龄的人 能够用那样的语气语调 两
  • RabbitMQ(八)【高级 - 过期时间 TTL】

    八 RabbitMQ高级 过期时间 TTL 上一篇文章 SpringBoot案例 概述 过期时间 TTL 表示可以对消息设置预期的时间 在这个时间内都可以被消费者接收获取 过了之后消息将自动被删除 RabbitMQ可以对 消息和队列 设置
  • 技术博客?

    我认为技术博客是一个非常好的工具 能够帮助我们更好地学习和理解各种技术 同时还能够帮助我们建立自己的品牌和声誉 在我的博客中 我会分享各种最新的技术 开发工具 以及一些我在实际项目中的经验和教训 我的博客主题主要分为以下几个方面 1 前端开
  • 如何高效解决问题?

    前言 我相信很多人在生活中和工作中都会遇到大大小小的问题 每个人解决问题的效率和思维都是有差别的 那么怎么样才能高效解决问题呢 其实问题的产生 从现象到逻辑 考验着我们的知识储备 磨砺着能力的段位 训练着思维的灵活度 从现象到方法论 5W1
  • Elasticsearch学习系列之term和match查询 Elasticsearch查询模式

    Elasticsearch查询模式 一种是像传递URL参数一样去传递查询语句 被称为简单查询 GET library books search 查询index为library type为books的全部内容 GET library book