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实现异步多线程任务(若依源码学习)
最近在学习若依这个开源项目,发现他记录登录日志的时候使用了异步线程去记录日志,觉得这个方案也挺不错的,在此学习记录下来,以后在工作中也能提供一种思路,其他小伙伴如果有觉得不错的方案也可以在评论区里留言&#…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
