elasticsearch结构化搜索
Elasticsearch的结构化搜索(Structured Search)是指对具有明确格式和结构的数据进行搜索的过程。这类数据包括日期、时间、数字、布尔值等,它们都有精确的格式,可以进行逻辑操作,比如比较数值范围或判断值的大小。结构化数据也可以包括具有离散集合的文本字段,例如预定义的标签集合或具有固定选项的字段。
### 结构化搜索的关键特点:
1. **精确匹配**:结构化搜索通常用于查找与查询条件完全匹配的项。
2. **范围查询**:可以对数字或日期类型的字段执行范围查询。
3. **逻辑操作**:可以对结构化字段执行逻辑操作,如等于(=)、不等于(!=)、大于(>)、小于(<)等。
4. **无相关性评分**:结构化搜索的结果通常不涉及相关性评分,因为它们是确定性的匹配。
5. **使用Term查询**:对于结构化数据,Elasticsearch主要使用Term查询来执行精确匹配。
### 结构化搜索的常见查询类型:
- **Term Query**:用于执行精确匹配,适用于结构化字段。
- **Terms Query**:用于查找包含任一指定值的文档。
- **Range Query**:用于根据数值或日期范围筛选文档。
- **Prefix Query**:用于匹配以特定前缀开始的项,适用于结构化文本字段。
- **Wildcard Query**:用于执行通配符搜索,可以匹配任意字符或任意数量的字符。
- **Regexp Query**:用于执行正则表达式匹配。
- **Exists Query**:用于查找包含指定字段的文档,无论字段的值是什么。
### 示例:
以下是一些结构化搜索的查询示例:
**1. 布尔值查询**:
```json
GET /products/_search
{
"query": {
"term": {
"available": true
}
}
}
```
这个查询将返回所有`available`字段值为`true`的文档。
**2. 数值范围查询**:
```json
GET /products/_search
{
"query": {
"range": {
"price": {
"gte": 10,
"lte": 50
}
}
}
}
```
这个查询将返回所有`price`字段值在10到50之间的文档。
**3. 日期范围查询**:
```json
GET /products/_search
{
"query": {
"range": {
"date": {
"gte": "2020-01-01",
"lt": "2020-12-31"
}
}
}
}
```
这个查询将返回所有`date`字段值在2020年1月1日到2020年12月31日之间的文档。
结构化搜索在Elasticsearch中非常有用,特别是在需要对具有明确格式的数据执行精确匹配或范围查询的场景中。通过使用合适的查询类型,可以有效地检索和管理结构化数据。
Elasticsearch支持两种主要类型的搜索:基于词项(Term-based)的搜索和基于全文(Full-text)的搜索。这两种搜索方式适用于不同的场景和需求。
### 基于词项的搜索
基于词项的搜索适用于精确匹配的场景,如搜索特定的关键词或短语。这种搜索方式不会对文本进行分词处理,而是直接按照文本的原样进行匹配。
**特点**:
- 通常用于`keyword`类型的字段。
- 不进行文本分析,即不会应用分词器和过滤器。
- 匹配整个词项,不区分大小写。
- 适用于结构化数据,如ID、状态码、标签等。
**查询示例**:
```json
GET /my_index/_search
{
"query": {
"term": {
"status.keyword": {
"value": "active"
}
}
}
}
```
在这个例子中,我们使用`term`查询来搜索`status`字段中精确匹配"active"的文档。
### 基于全文的搜索
基于全文的搜索适用于对文本内容进行复杂查询的场景,如模糊搜索、短语搜索或相关性搜索。这种搜索方式会对文本进行分词处理,然后基于分词后的词项进行匹配。
**特点**:
- 通常用于`text`类型的字段。
- 应用文本分析,包括分词器和过滤器。
- 可以进行模糊匹配、短语匹配和相关性评分。
- 适用于非结构化数据,如文章、描述、评论等。
**查询示例**:
```json
GET /my_index/_search
{
"query": {
"match": {
"content": "Elasticsearch guide"
}
}
}
```
在这个例子中,我们使用`match`查询来搜索`content`字段中包含"Elasticsearch"和"guide"的文档。
### 区别和使用场景
- **数据类型**:基于词项的搜索通常用于`keyword`类型字段,而基于全文的搜索用于`text`类型字段。
- **文本分析**:基于词项的搜索不进行文本分析,而基于全文的搜索会应用分词器和过滤器。
- **匹配方式**:基于词项的搜索进行精确匹配,基于全文的搜索可以进行模糊匹配和短语匹配。
- **适用场景**:基于词项的搜索适用于需要精确匹配的场景,如状态码、枚举值等;基于全文的搜索适用于需要复杂文本分析的场景,如搜索引擎、内容推荐等。
理解这两种搜索方式的区别和适用场景对于设计和实现有效的Elasticsearch搜索策略至关重要。通过合理选择字段类型和查询方式,可以优化搜索效果和性能。
相关文章:
elasticsearch结构化搜索
Elasticsearch的结构化搜索(Structured Search)是指对具有明确格式和结构的数据进行搜索的过程。这类数据包括日期、时间、数字、布尔值等,它们都有精确的格式,可以进行逻辑操作,比如比较数值范围或判断值的大小。结构…...
街道网格宣传稿件投稿我知道了好方法
作为街道信息宣传员,我的日常是将街道的每一项重要活动、每一份温暖故事编织成文字,传递给公众。这份工作既充满挑战又极具意义,但在最初,我却在这份看似简单的任务上屡屡受阻。那时,我的投稿方式单一且传统——依赖电子邮件,将稿件发送至各大媒体的投稿箱。我本以为,只要内容足…...
电脑有线无线一起用怎么设置
要在电脑上同时使用有线和无线网络,可以通过以下几种方法进行设置: 调整网络高级设置: 进入“网络和共享中心”。点击“更改适配器设置”。按键盘Alt键调出菜单栏,然后点击“高级→高级设置”。在“适配器和绑定”标签页下可以对可…...
通过LotusScript中的NotesDateTime类来进行时间计算
大家好,才是真的好。 今天我们介绍的是时间日期处理,其实以前也讲过,主要是通过LotusScript中的NotesDateTime类来进行时间计算。 但是这里也存在一个问题:就是时间日期类的比较只能计算出秒,不能计算出毫秒。 毕竟…...
【前端面经】数组算法题解
目录 题目一:两数之和题目二:最长无重复字符子串题目三:合并两个有序数组题目四:寻找数组中的峰值 题目一:两数之和 描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目…...
java架构设计-COLA
参考:https://github.com/alibaba/COLA 架构 要素:组成架构的重要元素 结构:要素直接的关系 意义:定义良好的结构,治理应用复杂度,降低系统熵值,改善混乱状态 创建COLA应用: mvn …...
【进阶篇-Day3:JAVA接口新特性、代码块、内部类、Lambda表达式、组件等的介绍】
目录 1、接口新特性1.1 JDK8的新特性1.2 JDK9的新特性 2、代码块2.1 代码块的定义2.2 代码块的分类 3、内部类3.1 内部类的定义3.2 内部类成员访问3.3 学习内部类的原因3.4 内部类的分类3.4.1 成员内部类3.4.2 静态内部类3.4.3 局部内部类3.4.4 匿名内部类(1&#x…...
72-UDP协议工作原理及实战
#ifndef UDPCOMM_H #define UDPCOMM_H#include <QMainWindow> #include <QUdpSocket> // 用于发送和接收UDP数据报 #include <QtNetwork>QT_BEGIN_NAMESPACE namespace Ui { class udpComm; } QT_END_NAMESPACEclass udpComm : public QMainWindow {Q_OBJECT…...
数据结构——顺序表的实现
数据结构——顺序表的实现 一 关于顺序表的简单知识二 动态顺序表 一 关于顺序表的简单知识 1.顺序表的底层结构是数组,在数组的基础上增加了增,删,查,改等方法。 2.顺序表的分类:静态顺序表和动态顺序表 静态顺序表的…...
【牛客面试必刷TOP101】Day33.BM70 兑换零钱(一)和BM71 最长上升子序列(一)
文章目录 前言一、BM70 兑换零钱(一)题目描述题目解析二、BM71 最长上升子序列(一)题目描述题目解析总结 前言 一、BM70 兑换零钱(一) 题目描述 描述: 给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币…...
重构与优化-优化函数调用(5)
Rename Method Rename Method(“函数改名”),它的核心目标是通过修改方法的名称来更好地反映其功能,提高代码的可读性和维护性。这项重构不仅适用于Java,也同样适用于其他面向对象的编程语言。下面是进行Rename Method重构时的一些关键点和步骤: 关键目的 提升代码清晰…...
6月18日(周二)A股行总结:A股震荡收涨,车路云概念全日强势,10年、30年国债期货齐创新高
车路云概念股发力上涨,中海达、华铭智能等多股20CM涨停。半导体板块走强,中芯国际港股上涨近3% 。白酒板块下跌,贵州茅台跌1.3% 。30年期及10年期国债期货主力合约均创上市以来新高。 周二,A股全日窄幅震荡 沪指收涨0…...
今年的618,似乎很平淡!
电商平台取消预售制度的第一个大促,快递业表现如何? 今年的618大促与往年有些不同,自4月起,天猫、京东、快手等主流平台相继官宣取消预售,打出“现货开卖”标签,这意味着消费者不用再被“烧脑”的优惠计算…...
嵌入式中间件_3.嵌入式中间件的一般架构
根据嵌入式中间件的不同类型和其应用对象的不同,其架构也有所不同,通常嵌入式中间件没有统一的架构,这里仅仅列举两种中间件架构。 1.消息中间件 1.1消息中间件原理架构 消息中间件是消息传输过程中保存消息的一种容器。它将消息从它的源中…...
Java基础 - 练习(二)打印菱形
Java基础练习 打印菱形,先上代码: // 方法一:基础,好理解 public static void diamond() {//控制行数for (int i 1; i < 4; i) {//空格的个数for (int k 1; k < 4 - i; k) {System.out.print(" ");}//控制星星…...
链表OJ--超详细解析
链表OJ 文章目录 链表OJ1. 反转链表2. 返回K值3. 链表的中间节点4. 回文链表5. 相交链表6. 带环链表6.1 为什么一定会相遇,有没有可能会错过,或者出现永远追不上的情况,请证明6.2 slow一次走一步,fast如果一次走3步,走…...
JavaFX 分隔符
Separator类表示水平或垂直分隔线。它分割元素,不产生任何动作。 我们可以设计风格,应用视觉效果,并为分隔符设置动画。 默认情况下,分隔符是水平的。我们可以使用setOrientation方法改变它的方向。 Separator类扩展了Node类。…...
mysql安装配置教程(Linux+Windows)
mysql安装配置教程(LinuxWindows) 文章目录 mysql安装配置教程(LinuxWindows)摘要在 Linux 上安装和配置 MySQL1. 安装 MySQLUbuntu/DebianCentOS/RHEL 2. 配置 MySQL初始化 MySQL登录 MySQL创建数据库和用户配置 MySQL 文件 3. 测…...
MySQL数据库与基本操作(增删改查)
一、数据库的基本概念 数据库要学习的四个基本概念,主要是:数据、数据库系统、数据库、数据管理系统。数据(Date)是描述事物的记录,数据库系统(DBS),数据库管理系统(DBMS…...
【学习总结】SpringBoot中使用单例模式+ScheduledExecutorService实现异步多线程任务(若依源码学习)
最近在学习若依这个开源项目,发现他记录登录日志的时候使用了异步线程去记录日志,觉得这个方案也挺不错的,在此学习记录下来,以后在工作中也能提供一种思路,其他小伙伴如果有觉得不错的方案也可以在评论区里留言&#…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...
