因为项目需要调用api查询elasticsearch拿数据,这边记录一下项目中常用的一些查询参数

es的查询接口为:

GET /索引名/_search
python调用data为需要传入的参数import requestsres = requests.request("POST", f"http://127.0.0.1:9200/{index}/_search", json=data)print(res.json())

一、常用查询关键字

1、match

match是模糊匹配查询,根据分词器(如果创建mapping没有指定分词器,Es将会采取默认的分词器:standard,standard分词将会把匹配的词组分成单个的字,而不是短语)将指定的query查询的语句进行分词匹配。

查询索引中name为Tom的文档:
{'query': {'match': {'name': 'Tom'}}
}

2、match_pharse

match_pharse属于短语匹配,要求查询的词句和匹配的短语顺序必须一致,并且是连续的,但可以设置 slop 值来指定查询项之间可以分隔多远的距离

查询索引中woke为程序员的文档:
{'query': {'match_pharse': {'woke': '程序员'}}
}

3、fuzzy

fuzzy查询的时候,不会根据分词器匹配,只会进行拆分,比如查询的是"海zei王",在分词器下(也就是match中)是无法匹配到单个词的,因为它不是一个短语,但是在fuzzy中是可以匹配的,并且fuzzy支持模糊和一定的容错查询匹配,因为它做的是匹配词的拆分,并不是短语。

查询索引中name为海zei王的文档:
{'query': {'fuzzy': {'name': '海zei王'}}
}

4、multi_match

多字段匹配,比如在查询test这个值的时候我们不仅需要在A这个字段中查询,同时它也有可能存在B中,按照普通的写法你可能需要写两次查询,但是使用了multi_search只需要指定具体的fields就可以实现多字段查询

同时在age字段和phone字段搜索包含38这个数字的文档:
{'query': {'multi_match': {'query': '38','fields':['age','phone']}}
}

5、regexp

正则表达式匹配,该匹配模式下我们可以按照正则表达式的符号去匹配具体的值,比如name字段,可以包含有.和*去正则匹配具体的值,?表示任一字符,*表示所有字符,还有其他的正则符号都可以使用,详情参考Regexp Query | Elasticsearch Guide [6.8] | Elastic

匹配手机号以1到9之前的开头,并且第二位是3最后一位是0或者1的手机号的文档:
{'query': {'regexp': {'phone': {'value':'[1-9]3.*[0-1]'}}}
}

6、wildcard

通配符匹配,wildcard和regexp类似,不过它们也有不同之处。regexp的实际匹配能力要大于wildcard,在进行简单的匹配时候,比如名字的*或者?的简单普通匹配,建议使用wildcard而不是regexp,wildcard的效率要高于regexp,regexp可以实现更为复杂的场景,但是效率低一些,通俗的说wildcard是regexp的简化版本.

采用通配符匹配手机的电话号
{'query': {'wildcard': {'phone': '13643091*'}}
}

7、term

term的英文含义表示是:精确的意思,在term查询中,表示做的是精确查询,整词匹配,不会对所匹配项进行拆分。直接以整词进行匹配,如果能查询到就命中该文档

查询的name为鲁班的文档
{'query': {'term': {'name': {'value':'鲁班'}}}
}

8、 terms

terms和term的区别就是terms允许匹配多个值,而term只允许匹配一个值,在进行多值匹配的场景中可以使用terms,terms匹配到其中任何一个值就会认为整个文档是匹配的,terms多个值如果多个都匹配会返回所有文档

查询age为24、66的任一值,查到就返回文档
{'query': {'terms': {'age': ['24','36']}}
}

9、range

range表示一个区间范围查找,这个范围可以是日期或者数值,ES的range比较灵活和明确,可以指定两个边界是否包含,通过参数include_lower:true 、include_upper:true来控制

查询age为20到30区间所有文档,
include_lower表示是否包含边界最小值(true表示包含),
include_upper表示是否包含边界最大值(true表示包含,false表示不包含){'query': {'range': {'age': {'from': 20,'to': 30,'include_lower':true,'include_upper':false}}}
}
查询log_time对应时间区间内的所有文档,
gt/gt表示起始时间,gte包含起始时间点,gt不包含起始时间点,
lt/lte表示结束时间,lte包结束时间点,lt不包含结束时间点{'query': {'range': {'log_time': {'gte': '2022-04-02 00:00:00','lt': '2022-04-02 23:00:00','format': 'yyyy-MM-dd HH:mm:ss',}}}
}

二、组合多查询

bool (布尔)过滤器。 这是个 复合过滤器(compound filter) ,它可以接受多个其他过滤器作为参数,并将这些过滤器结合成各式各样的布尔(逻辑)组合。

1、must

文档 必须must 匹配这些条件才能被包含进来,与 AND 等价。

must数组里面可以插入多个关键字查询条件
以下用例中查询sn为00000000, date_time为2022-04-02 00:00:00 到2022-04-02 23:00:00的文件
{'query': {'bool': {'must': [{'terms': { 'sn': ['00000000']}},{'range': {'date_time': {'gt': '2022-04-02 00:00:00','lt': '2022-04-02 23:00:00','format': 'yyyy-MM-dd HH:mm:ss',}}}]}}
}

2、must_not

文档 必须不 must_not 匹配这些条件才能被包含进来,与 NOT 等价。

用例为:查询name不为李白的文件
{'query': {'bool': {'must_not': [{'terms': { 'name': ['李白']}}]}}
}

3、should

至少有一个语句要匹配,与 OR 等价

用例为:查询name为李白或者age为12 的文件
{'query': {'bool': {'should': [{'terms': { 'name': ['李白']}},{'term': { 'age': '12'}}]}}
}

4、filter

必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。filter不会计算搜索条件相关度分数,也不会根据相关度分数进行排序,相对效率更高一些。

用例为:查询name为李白同的文件
{'query': {'bool': {'filter': [{'terms': { 'name': ['李白']}}]}}
}

5、must、must_not、should组合用例


以下用例中查询
sn为00000000, date_time为2022-04-02 00:00:00 到2022-04-02 23:00:00
或者name为Tom并且detail不以智能开头的文档
name为To
{'query': {'bool': {'must': [{'terms': { 'sn': ['00000000']}},{'range': {'date_time': {'gt': '2022-04-02 00:00:00','lt': '2022-04-02 23:00:00','format': 'yyyy-MM-dd HH:mm:ss',}}}],'must_not': [{'regexp': {'detail':'智能*'}}],'should': [{'match': { 'name': 'Tom'}}]}}
}

三、分页和排序

分页检索,可以通过size和from来实现,size返回的条数,默认是10条,from返回的开始。

排序,可以根据sort来实现,该字段可以指定索引字段,也可以指定返回结果中的其他字段。

{"query":{"match_all":{}},"from":1,"size":10,"sort": {"age":"desc","money":"asc"}
}

ElasticSearch的API使用 - Yrion - 博客园

Elasticsearch查询参数介绍相关推荐

  1. 【Elasticsearch】Elasticsearch查询参数batched_reduce_size的解释

    1.概述 当我们使用Elasticsearch查询数据时,如果数据量非常大时,会命中大量分片中的大量数据,可能会造成集群内存异常,此时可以通过一个高级参数batched_reduce_size进行控制 ...

  2. elasticsearch系列五:搜索详解(查询建议介绍、Suggester 介绍)

    一.查询建议介绍 1. 查询建议是什么? 查询建议,为用户提供良好的使用体验.主要包括: 拼写检查: 自动建议查询词(自动补全) 拼写检查如图: 自动建议查询词(自动补全): 2. ES中查询建议的A ...

  3. Go Elasticsearch 查询快速入门

    文章目录 0.前言 1.根据 ID 查询 2.精确匹配单个字段 3.精确匹配单个字段的多个值 4.全文查询 5.范围查询 6.判断某个字段是否存在 7.bool 组合查询 must filter sh ...

  4. 助你掌握搜索神器,10个实用的Elasticsearch查询技巧

    前言   Elasticsearch是一个非常流行的搜索引擎,已经成为了许多企业的首选解决方案.然而,我们要想成为一个优秀的程序员,就必须掌握各种查询技巧.本文将向大家介绍10个实用的Elastics ...

  5. 枯燥无味的Elasticsearch检索参数字典

    2023年第一篇文章就这样水文了,拿出写了好久的<Elasticsearch查询请求时参数使用说明>水一次,懒惰了.兄弟们见谅,从发出来这篇文章开始,懒惰一去不回了兄弟们,让我们一起在新的 ...

  6. ES 04 - Elasticsearch查询索引文档的6种方法

    博客转载方面自己查看 目录 1 Query String Search(查询串检索) 2 Query DSL(ES特定语法检索) 3 Query Filter(过滤检索) 4 Full Text Se ...

  7. 2021年大数据ELK(十五):Elasticsearch SQL简单介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch SQL简单介绍 一.SQL与Elasticsear ...

  8. mysql 查询日志介绍

    MySQL查询日志介绍 MySQL的查询日志记录了所有MySQL数据库请求的信息.无论这些请求是否得到了正确的执行.默认文件名为hostname.log.默认情况下MySQL查询日志是关闭的.生产环境 ...

  9. MySQL查询日志介绍

    MySQL查询日志介绍 MySQL的查询日志记录了所有MySQL数据库请求的信息.无论这些请求是否得到了正确的执行.默认文件名为hostname.log.默认情况下MySQL查询日志是关闭的.生产环境 ...

最新文章

  1. 助力健康中国,国内首个中文医疗信息处理挑战榜正式发布
  2. win32应用程序_不是有效的win32应用程序怎么解决
  3. 通信电子线路期末复习第一章和第二章上
  4. Python 学习笔记12 类 - 使用类和实例
  5. FreeRTOS 之一 源码目录文件 及 移植详解
  6. js 动态拼接html 正则,在JavaScript中使用动态(可变)字符串作为正则表达式模式...
  7. 【Linux系统编程】POSIX无名信号量
  8. 以太坊在哪里买_DeFi只是以太坊的开胃小菜,以太坊2.0才是重头戏
  9. jsf netbeans_NetBeans Java EE技巧9:从数据库创建JSF应用程序
  10. 优秀!本科生发表Nature论文,直博美国顶尖名校
  11. java判断端口是否可用
  12. uniapp的选择收货地址
  13. 分享阿里云ace考试攻略 详解ACP认证考试须知
  14. esxi能直通的显卡型号_最便宜能高画质“吃鸡”的显卡是这个型号:RX470矿卡!...
  15. arch yaourt安装
  16. 创业成功,拉里•佩奇的五句箴言
  17. 10分钟pandas教程
  18. 利用策略组限制特定软件的运行
  19. Hack movies
  20. 关于浏览器主页被https://hao.360.com/?src=lmls=n78852a3c9b劫持

热门文章

  1. 2016蓝桥杯假期任务之《 黄金连分数》
  2. Mac苹果电脑杀毒软件CleanMyMac X
  3. Dom操作的性能优化
  4. 目标检测算法回顾之定义与挑战
  5. Python 爬取 13966 条运维招聘信息,这些岗位最吃香!
  6. Python 遍历文件
  7. 2010计算机一级基础知识,全国计算机一级Office2010+win7版考试模拟软件
  8. 马云转让支付宝,雅虎重回谈判桌
  9. android 为图片打上水印
  10. Mysql学习笔记(二)学完真可以出师系列第二弹