ES高级查询

        ES中提供了一种强大的检索数据方式,这种检索方式称为Query DSL,这种方式的丰富查询语法让ES检索变得更强大,更简洁。

1.常见查询

1.1查询所有[match_all]

match_all关键字:返回索引中的全部文档。

GET /products/_search
{
  "query": {
    "match_all": {}
  }

 

1.2term基于关键词查询

注意:文档信息存储是按照字段的类型去分词,以分词后的结果来存储的

1.在ES中除了text类型会分词,其余类型均不分词(如keyword、Integer、double、date、boolean),其完整的整个数据就是一个关键字/词。

2.在ES中默认使用的是标准分词器,中文是单字分词,英文是单词分词。

GET /products/_search        
{
  "query": {
    "term": {
      "description": {  #字段
        "value": "很"
      }
    }
  }

 

1.3range范围查询

GET /products/_search
{
  "query": {
    "range": {
      "price": { #字段
        "gte": 10,  #gt表示>,gte表示>=
        "lte": 20   #lt表示<,lte表示<=
      }
    }
  }

1.4prefix前缀查询

 

1.5wildcard查询

?可以匹配一个字符,而*可以匹配多个字符

 

1.6多id查询[ids]

用一组id获取多个对应的文档

GET /products/_search
{
  "query": {
    "ids": {
      "values": [1,2]
    }
  }

1.7模糊查询[fuzzy]

fuzzy关键字:用来模糊查询含有指定关键字的文档

 

注意:fuzzy模糊查询 最大模糊错误必须在0-2之间

  • 搜索关键词长度为2不允许存在模糊

  • 搜索关键词长度为3-5允许一次模糊

  • 搜索关键词长度大于5允许最大两次模糊

1.8布尔查询[bool]

bool关键字:用来组合多个条件实现复杂查询

  • must:相当于&&同时成立

  • should:相当于||成立一个就行

  • must_not:相当于!不能满足任何一个

 

2.多字段查询[multi_match]

 

注意:多字段查询时,query中的查询语句会根据fields中字段的类型先去分词之后再去查询,如果该字段不分词就会将整体作为条件进行查询。

比如先按照title来说,因为keyword类型是不分词的,所以会将"不是"整体作为title的条件去查,那肯定是查不到记录的。然后再看description,因为是text类型的,所以会分词,先分为"不"和"是",然后将这两个词分别作为description的条件去查,就能查到这一条记录。

3.默认字段分词查询[query_string]

就是先将查询条件按照设定的默认字段类型去分词,分完词后,作为字段的条件去查询。

因为title的类型keyword不分词,所以会直接将"库迪"作为条件去title中查询,那肯定是查询不到的。  

  因为description的类型是text所以要分词,先将查询条件"我是很"分为"我"、"是"、"很"。在分别作为条件去description中查询,可以查询出来两条结果。

4.高亮显示highlight

注意:高亮只能用于可以分词的字段,即text。

GET /products/_search
{
  "query": {
    "query_string": {
      "default_field": "description",
      "query": "我是很"
    }
  },
  "highlight": {
    "pre_tags": ["<span style='color:red;'>"],  #开始标签
    "post_tags": ["</span>"],          #结束标签
    "require_field_match": "false",  #开启多字段高亮
    "fields": {
      "*":{}
      }
    }

 

5.返回条数等待[size]

size:指定查询结果中返回指定条数。默认返回值10条。

GET /products/_search
{
    "query":{
        "match_all":{}
    },
    "size":5

6.分页查询[from]

from:用来指定起始返回位置,和size关键字连用可实现分页效果。

GET /products/_search
{
    "query":{
        "match_all":{}
    },
    "from":0
    "size":5,

7.指定字段排序[sort]

GET /products/_search
{
    "query":{
        "match_all":{}
    },
    "sort":[
      {
        "price":{
            "order":"desc"
        }
      }
    ]

8.返回指定字段

_socre:是一个数组,在数组中用来指定展示哪些字段。

GET /products/_search
{
    "query":{
        "match_all":{}
    },
    "_source":["title","description"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/343806.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【群晖NAS】记一次FRP报错:login to server failed: connection write timeout

报错如下&#xff1a; rongfuDS224plus:~/fff/frp$ ./frpc -c ./frpc.toml 2024/01/12 23:08:31 [I] [root.go:139] start frpc service for config file [./frpc.toml] 2024/01/12 23:08:41 [W] [service.go:131] login to server failed: i/o deadline reached 2024/01/12 2…

YOLOv6s,map值打印成两位小数(原本是显示0.538,变成显示为53.79)

显示结果 更改前&#xff1a; 更改后&#xff1a; 方法 将tools/eval.py中的--do_pr_metric后面改为defaultTrue即可打印出map值原本是显示0.538&#xff0c;变成显示为53.79&#xff0c;方法为&#x1f447; 在YOLOv6-main/yolov6/core/evaler.py中做如下更改&#xff1a…

Android 12.0 通知--PendingIntent源码分析

结论: PendingIntent 是延迟触发的一种 Intent , 通过上图的过程看,PendingIntent 的执行,是一种跨进程通信.首先创建PendingIntent对象时,就把该对象定义到 ActivityManagerService, 到执行 PengdingIntent 动作时, 也是在 ActivityManagerService 找到 目标PengdingIntent, 从…

完整的模型验证套路

读取图片 from PIL import Imageimg_path "../Yennefer_of_Vengerberg.jpg" image Image.open(img_path) print(image)转换成灰度图&#xff08;可选&#xff09; image image.convert(L) image.show()转换成RGB格式 image image.convert(RGB)因为png格式是四…

区块链是怎么存储数据的?

每个块都是有大小限制的新的数据存储单元&#xff0c;当前数据不到上限&#xff0c;那么都可以添加进块。当前数据达到了上限&#xff0c;那么就得分表/分块&#xff0c;超限的那部分数据就需要等待下个区块存储 存储的数据&#xff1a;和mysql一样&#xff0c;文本数据直接存储…

从vue小白到高手,从一个内容管理网站开始实战开发第八天,登录功能后台功能设计--业务逻辑层基础接口和基础服务实现

上一篇我们介绍了项目后续要使用到的工具类,关于工具类的创建可以查看 从vue小白到高手,从一个内容管理网站开始实战开发第七天,登录功能后台功能设计--通用分页、枚举以及相关工具类-CSDN博客文章浏览阅读2次。本次内容主要介绍了项目后续用到的部分工具类,这些工具类,在…

适用于 Windows 的 12 个最佳免费磁盘分区管理器软件

分区是与其他部分分开的硬盘驱动器部分。它使您能够将硬盘划分为不同的逻辑部分。分区软件是一种工具&#xff0c;可帮助您执行基本选项&#xff0c;例如创建、调整大小和删除物理磁盘的分区。许多此类程序允许您更改磁盘片的标签以便于识别数据。 适用于 Windows 的 12 个最佳…

C++笔记之cout高亮输出以及纯C++实现一个彩色时钟

C笔记之cout高亮输出以及纯C实现一个彩色时钟 code review! 文章目录 C笔记之cout高亮输出以及纯C实现一个彩色时钟一.cout高亮输出1.1.运行1.2.代码一1.3.代码二1.4.重置终端的文本格式到默认设置说明 二.纯C实现一个彩色时钟2.1.运行2.2.main.cc2.3.cout带颜色打印输出技巧…

C++设计模式-- 2.代理模式

文章目录 代理模式 代理模式 代理模式的定义&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。在某些情况下&#xff0c;一个对象不适合 或不能直接引用另一个对象&#xff0c;而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式有以下三种角色&…

中本聪15年前剧本重演!“比特币上市首日”成绩斐然,ETF交易量冲破46亿美元!

2024年1月11日&#xff0c;美国证券交易委员会&#xff08;SEC&#xff09;以3-2投票结果批准比特币现货ETF。 2009年1月11日&#xff0c;中本聪向比特币早期开发者哈尔芬尼(Hal Finney)转出10枚比特币&#xff0c;使他成为世界上第一个透过交易获得比特币的人。随后&#xff0…

Python的内置函数 def __init__和__str__用法

__init__() 当使用类名&#xff08;&#xff09;创建对象时&#xff0c;会自动执行以下操作 __init__()是对象的的内置方法&#xff0c;是专门用来定义一个类 具有哪些属性的方法 class Person:def __init__(self):print("这是一个初始化方法")result Person() …

(26)Linux 进程通信之共享内存(共享储存空间)

共享内存是System V版本的最后一个进程间通信方式。共享内存&#xff0c;顾名思义就是允许两个不相关的进程访问同一个逻辑内存&#xff0c;共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一…