当前位置: 首页 > news >正文

ES 查询语法-详解

文章目录

  • 1.DSL查询文档
    • 1.1.DSL查询分类
    • 1.2.全文检索查询
      • 1.2.1.使用场景
      • 1.2.2.基本语法
      • 1.2.3.总结
    • 1.3.精准查询
      • 1.3.1.term查询
      • 1.3.2.总结

1.DSL查询文档

elasticsearch的查询依然是基于JSON风格的DSL来实现的。

1.1.DSL查询分类

Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括:

  • 查询所有:查询出所有数据,一般测试用。例如:match_all

  • 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:

    • match_query
    • multi_match_query
  • 精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:

    • ids
    • range
    • term
      查询的语法基本一致:
GET /indexName/_search
{"query": {"查询类型": {"查询条件": "条件值"}}
}

我们以查询所有为例,其中:

  • 查询类型为match_all
  • 没有查询条件
// 查询所有
GET /indexName/_search
{"query": {"match_all": {}}
}

其它查询无非就是查询类型查询条件的变化。

1.2.全文检索查询

1.2.1.使用场景

全文检索查询的基本流程如下:

  • 对用户搜索的内容做分词,得到词条
  • 根据词条去倒排索引库中匹配,得到文档id
  • 根据文档id找到文档,返回给用户

比较常用的场景包括:

  • 商城的输入框搜索
  • 百度输入框搜索

例如京东:

在这里插入图片描述

因为是拿着词条去匹配,因此参与搜索的字段也必须是可分词的text类型的字段。

1.2.2.基本语法

常见的全文检索查询包括:

  • match查询:单字段查询
  • multi_match查询:多字段查询,任意一个字段符合条件就算符合查询条件

match查询语法如下:

GET /indexName/_search
{"query": {"match": {"FIELD": "TEXT"}}
}

mulit_match语法如下:

GET /indexName/_search
{"query": {"multi_match": {"query": "TEXT","fields": ["FIELD1", " FIELD12"]}}
}

1.2.3.总结

match和multi_match的区别是什么?

  • match:根据一个字段查询
  • multi_match:根据多个字段查询,参与查询字段越多,查询性能越差

1.3.精准查询

精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。常见的有:

  • term:根据词条精确值查询
  • range:根据值的范围查询

1.3.1.term查询

因为精确查询的字段搜是不分词的字段,因此查询的条件也必须是不分词的词条。查询时,用户输入的内容跟自动值完全匹配时才认为符合条件。如果用户输入的内容过多,反而搜索不到数据。

语法说明:

// term查询
GET /indexName/_search
{"query": {"term": {"FIELD": {"value": "VALUE"}}}
}

示例:

当我搜索的是精确词条时,能正确查询出结果:
在这里插入图片描述
基本语法:

// range查询
GET /indexName/_search
{"query": {"range": {"FIELD": {"gte": 10, // 这里的gte代表大于等于,gt则代表大于"lte": 20 // lte代表小于等于,lt则代表小于}}}
}

1.3.2.总结

精确查询常见的有哪些?

  • term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段
  • range查询:根据数值范围查询,可以是数值、日期的范围

相关文章:

  • 2. OpenHarmony源码下载
  • 腾讯云标准型SA5云服务器CPU性能测评
  • PTA 斯诺克
  • excel自己记录
  • 【Java 进阶篇】Jedis:让Java与Redis轻松对话的利器
  • 《云计算:云端协同,智慧互联》
  • Qt ListWidget
  • Java JDBC中ResultSet的详细说明
  • Ubuntu18 Opencv3.4.12 viz 3D显示安装、编译、使用、移植
  • Arduino驱动PT100数字K型高温传感器(温湿度传感器)
  • 数据库基础入门 — SQL排序与分页
  • 武汉光庭公司地图引擎开发工程师24秋招三场面试完整流程
  • 使用C++从0到1实现人工智能神经网络及实战案例
  • UE 材质,如何只取0~1之间的值,其余值抛弃
  • Vuejs+ElementUI搭建后台管理系统框架
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【5+】跨webview多页面 触发事件(二)
  • flutter的key在widget list的作用以及必要性
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • React-生命周期杂记
  • React中的“虫洞”——Context
  • 分布式任务队列Celery
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 【云吞铺子】性能抖动剖析(二)
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​插件化DPI在商用WIFI中的价值
  • #LLM入门|Prompt#3.3_存储_Memory
  • #pragma multi_compile #pragma shader_feature
  • #考研#计算机文化知识1(局域网及网络互联)
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (C语言)fread与fwrite详解
  • (pojstep1.1.2)2654(直叙式模拟)
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (三)c52学习之旅-点亮LED灯
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)VirtualBox安装增强功能
  • (一)WLAN定义和基本架构转
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net7 环境安装配置
  • .Net的DataSet直接与SQL2005交互
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [.NET]桃源网络硬盘 v7.4
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [C#][DevPress]事件委托的使用
  • [Hive] INSERT OVERWRITE DIRECTORY要注意的问题
  • [LLM]大模型八股知识点(一)
  • [mysql]SQL语言的规则和规范
  • [No000016]为什么假期计划总是做不到?
  • [NOIP2014] 提高组 洛谷P1941 飞扬的小鸟