elasticsearch基本语法

这里写自定义目录标题

    • elasticsearch简介
    • 基本语法
      • 索引
        • 创建索引
        • 修改索引
        • 删除索引
      • 查询
        • 简单查询
        • 精确查询
        • 条件查询
        • 范围查询:
          • 聚合查询:
          • 排序和分页:
    • 参考文献:

elasticsearch简介

Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建而成。它提供了一个快速、可扩展和分布式的全文搜索引擎,适用于各种类型的数据和用例。

以下是 Elasticsearch 的一些主要特点和功能:

  1. 分布式架构:Elasticsearch 使用分布式架构,可以在多个节点上存储和处理数据。它具有高可用性和容错性,可以自动处理节点故障和数据复制。

  2. 实时搜索和分析:Elasticsearch 提供了实时搜索和分析功能,可以快速地对大量数据进行搜索、过滤和聚合操作。它支持全文搜索、近实时的数据索引和分析,适用于日志分析、监控数据、电子商务等场景。

  3. 多种数据类型支持:Elasticsearch 支持多种数据类型,包括文本、数值、地理位置、日期等。它可以处理结构化和非结构化数据,并提供了丰富的查询语言和过滤器来处理不同类型的数据。

  4. 强大的查询语言:Elasticsearch 使用基于 JSON 的查询语言,可以进行复杂的查询和过滤操作。它支持全文搜索、模糊匹配、范围查询、聚合等功能,可以灵活地满足各种搜索需求。

  5. 可扩展性和高性能:Elasticsearch 具有良好的可扩展性,可以通过添加更多的节点来扩展存储和处理能力。它使用倒排索引和分布式搜索算法,提供了快速的搜索和分析性能。

  6. 插件生态系统:Elasticsearch 拥有丰富的插件生态系统,可以扩展其功能和集成其他工具。例如,可以使用插件来实现数据可视化、安全认证、数据同步等功能。

Elasticsearch 在许多领域都有广泛的应用,包括企业搜索、日志分析、电商推荐、监控和报告等。它易于使用、可扩展和高性能,成为了许多应用程序中的核心组件。

基本语法

Elasticsearch是一个分布式的RESTful 风格的搜索和数据分析引擎。

索引

ES的索引主要由3部分组成:

  1. mappings:描述索引的字段,以及字段的各种属性
  2. setting:描述该索引的全局配置,包括副本数、分片数等
  3. aliases:索引的别名。

mappings:在创建一个索引的时候,可以对 dynamic 进行设置,可以设成 false、true 或者 strict。

比如一个新的文档,这个文档包含一个字段,当 Dynamic 设置为 true 时,这个文档可以被索引进 ES,这个字段也可以被索引,也就是这个字段可以被搜索,Mapping 也同时被更新;当 dynamic 被设置为 false 时候,存在新增字段的数据写入,该数据可以被索引,但是新增字段被丢弃;当设置成 strict 模式时候,数据写入直接出错。

setting:用于定义索引的全局设置和配置,并非某一个字段的设置。
表的属性设置按是否可更改可分为:

  1. (static) 静态:创建后不能更改,它们只能在创建索引时或在关闭的索引上设置。
  2. (dynamic) 动态:创建后,可更改,可以使用 update-index-settings API 动态的在活动索引上更改它们。
    主要属性如下:
属性名类型描述
index.number_of_shards静态指定索引的分片数。默认为5。
index.shard.check_on_startup静态当检查到分片损坏将禁止被打开。
index.codec静态默认值:default,是使用LZ4压缩算法,压缩存储的数据;可以设置成best_compression;它使用 DEFLATE 拥有更高的压缩比,但是存储性能将会降低。在修改压缩类型之后,在下次段合并的时候将会使用。
index.routing_partition_size静态可以路由的分片数量,同样只能在创建索引时指定,默认值为1.这个值必须小于number_of_shards(除非number_of_shards的值也是1)
index.load_fixed_bitset_filters_eagerly静态nestedquery的cache filter是否预加载,值为true(默认)、false
index.number_of_replicas动态指定索引的副本数。默认为1。
index.auto_expand_replicas动态设置是否根据节点数量,自动扩展副本数量。
index.refresh_interval动态索引执行刷新的频率,默认30s

alias:索引别名可以关联一个活多个索引。别名提供了一个可读性更好且易于管理的方式来引用索引,通过别名,可以在不影响应用程序的情况下,轻松切换、重命名或删除索引。
别名可以用于以下情况:

  1. 索引切换:可以将别名指向不同的索引,实现索引的无缝切换,而不需要修改应用程序代码。
  2. 索引重命名:可以通过修改别名的指向来重命名索引,而不需要重新索引数据。
  3. 索引删除:可以通过修改别名的指向来删除索引,而不会影响应用程序的查询。

下面通过一个例子来说明各个属性

PUT /products
{"mappings": {"properties": {//定义的字段属性"title": { //有一个名字为title的字段"type": "text",  //定义该字段类型为text"analyzer": "custom_analyzer", // 指定该title字段采用custom_analyzer分词器,"fields": {"keyword": { //定义了一个子字段 "keyword""type": "keyword" // 该子字段的类型为keyword,用于精确匹配} // 该字段的配置含义是:可以使用 "title" 字段进行模糊搜索,使用 "title.keyword" 字段进行精确匹配查询。}},"description": {"type": "text","analyzer": "custom_analyzer","fields": {"keyword": {"type": "keyword"}}},"price": {"type": "float"},"category": {"type": "keyword"},"tags": {"type": "keyword"},"created_at": {"type": "date","format": "yyyy-MM-dd HH:mm:ss"}}},"settings": {"analysis": {  //定义了索引的分析器和过滤器"analyzer": {  //定义了一个名为 "custom_analyzer" 的自定义分析器。它的类型为 "custom",表示使用自定义的分析器。"custom_analyzer": {"type": "custom","tokenizer": "standard",  //使用标准分词器进行分词"filter": ["lowercase", "my_stopwords"]}},"filter": { //定义了一个名为 "my_stopwords" 的过滤器. 它的类型为 "stop",表示使用停用词过滤器。停用词过滤器用于去除常见的停用词,如 "the"、"and"、"or" 等。"my_stopwords": {"type": "stop","stopwords": ["the", "and", "or"]}}}}
}

https://www.cnblogs.com/wupeixuan/p/12514843.html

创建索引
修改索引
删除索引

查询

简单查询

匹配所有文档:GET /index/_search
匹配指定字段的值:GET /index/_search?q=field:value
匹配多个字段的值:GET /index/_search?q=field1:value1 AND field2:value2

在这里插入图片描述

精确查询

在Elasticsearch中,可以使用精确查询来匹配字段的确切值。以下是几种常用的精确查询方式:

  1. Term Query(词项查询):用于精确匹配某个字段的确切值。
    示例:GET /index/_search {“query”: {“term”: {“field”: “value”}}}
  2. Terms Query(多词项查询):用于精确匹配某个字段的多个确切值。
    示例:GET /index/_search {“query”: {“terms”: {“field”: [“value1”, “value2”]}}}
条件查询

在Elasticsearch中,条件查询是通过使用查询语句来筛选满足特定条件的文档。match查询是一种常用的全文搜索查询,用于在指定字段中匹配包含特定词项的文档。match查询会对查询词进行分词处理,并与字段中的词项进行匹配。

匹配指定字段的值:GET /index/_search {“query”: {“match”: {“field”: “value”}}}
匹配多个字段的值:

GET /index/_search
{"query": {"bool": {"must": [{"match": {"field1": "value1"}},{"match": {"field2": "value2"}},{"match": {"field3": "value3"}}]}}
}

注意,must代表的是“与”的含义,即同时满足相应的条件。布尔查询还支持其他子句,如should(应该匹配至少一个子句)和must_not(不应该匹配任何子句)。

范围查询:

在Elasticsearch中,范围查询(Range Query)用于匹配某个字段在指定范围内的文档。范围可以是数值范围、日期范围或字符串范围。

以下是范围查询的使用示例:

  1. 数值范围查询:
GET /index/_search
{"query": {"range": {"field": {"gte": 10,"lte": 100}}}
}

上述示例中的范围查询会匹配字段field的值在10到100之间(包括10和100)的文档。

  1. 日期范围查询:
GET /index/_search
{"query": {"range": {"date_field": {"gte": "2021-01-01","lte": "2021-12-31"}}}
}

上述示例中的范围查询会匹配字段date_field的日期值在2021年1月1日到2021年12月31日之间(包括这两个日期)的文档。

  1. 字符串范围查询:
GET /index/_search
{"query": {"range": {"field": {"gte": "A","lte": "Z"}}}
}

上述示例中的范围查询会匹配字段field的字符串值在"A"到"Z"之间(包括"A"和"Z")的文档。

范围查询还支持其他参数和选项,如gt(大于)、lt(小于)、format(日期格式)等,可以根据具体需求进行配置。

需要注意的是,范围查询对于文本字段的排序和匹配是基于词项的,而不是基于整个字符串的。因此,在进行范围查询时,需要确保字段的分词和分析器设置正确。

聚合查询:

按字段分组统计:GET /index/_search {“aggs”: {“group_by_field”: {“terms”: {“field”: “field”}}}}
计算字段的平均值:GET /index/_search {“aggs”: {“avg_field”: {“avg”: {“field”: “field”}}}}
计算字段的总和:GET /index/_search {“aggs”: {“sum_field”: {“sum”: {“field”: “field”}}}}

排序和分页:

按字段排序:GET /index/_search {“sort”: [{“field”: {“order”: “asc”}}]}
分页查询:GET /index/_search {“from”: 0, “size”: 10}

参考文献:

https://xiaoxiami.gitbook.io/elasticsearch/ji-chu/35query-dsldslfang-shi-cha-8be229/354zhu-yu-ji-bie-cha-8be228-term-level-queries/range-cha-8be228-fan-wei-cha-8be229
https://cloud.tencent.com/developer/article/1947246

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

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

相关文章

ctfshow web入门 php特性 web136-web140

1.web136 还有一种写文件的命令时tee命令 payload&#xff1a; : ls /|tee 1 访问1下载查看文件1发现根目录下有flag cat /f149_15_h3r3|tee 2 访问下载查看文件22.web137 call_user_func <?php class myclass {static function say_hello(){echo "He…

近期分享学习心得3

1、全屏组件封装 先看之前大屏端的监控部分全屏代码 整块全屏代码 常规流是下面这种 //进入全屏 function full(ele) {//if (ele.requestFullscreen) {// ele.requestFullscreen();//} else if (ele.mozRequestFullScreen) {// ele.mozRequestFullScreen();//} el…

FreeRTOS自我救赎3之USB虚拟串口

任何项目的功能都从需求出发&#xff0c;在这里我用的是斥侯蜂的一块STM32F407ZGT6 在开发一个项目的过程中&#xff0c;免不了串口调试&#xff0c;而这块板子板载的mircousb不是直接连的引脚而是一个OTGUSB

Maven(4)-利用intellij idea创建maven 多模块项目

本文通过一个例子来介绍利用maven来构建一个多模块的jave项目。开发工具&#xff1a;intellij idea。 一、项目结构 multi-module-project是主工程&#xff0c;里面包含两个模块&#xff08;Module&#xff09;&#xff1a; web-app是应用层&#xff0c;用于界面展示&#xff…

FFmpeg 命令:从入门到精通 | FFmpeg 解码流程

FFmpeg 命令&#xff1a;从入门到精通 | FFmpeg 解码流程 FFmpeg 命令&#xff1a;从入门到精通 | FFmpeg 解码流程流程图FFmpeg 解码的函数FFmpeg 解码的数据结构补充小知识 FFmpeg 命令&#xff1a;从入门到精通 | FFmpeg 解码流程 本内容参考雷霄骅博士的 FFmpeg 教程。 流…

ubuntu2204配置仓库为阿里源

官网上支持到2004&#xff0c;2204需要手动更改一下 deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jam…

学生用的台灯护眼的哪种比较好?精选适合学生用的护眼台灯

现代小孩的学习压力确实很大&#xff0c;已经不能和我们以往那种“半大自然化学习”相提并论啦&#xff0c;如今各种学习PAD、电脑网课&#xff0c;成堆的学习资料与作业&#xff0c;恐怕是从小学甚至学前就已经是常态了。而且在平时我们路过学校的时候应该也不难发现&#xff…

Vue中如何进行音视频录制与视频剪辑

在Vue中进行音视频录制与视频剪辑 随着互联网的发展&#xff0c;音视频处理已经成为前端开发中一个越来越重要的领域。Vue.js作为一款流行的前端框架&#xff0c;为我们提供了丰富的工具和生态系统&#xff0c;使得音视频录制和编辑变得更加容易。本文将介绍如何在Vue中进行音…

论文阅读--Cell-free massive MIMO versus small cells

无蜂窝大规模MIMO与小蜂窝网络 论文信息 Ngo H Q, Ashikhmin A, Yang H, et al. Cell-free massive MIMO versus small cells[J]. IEEE Transactions on Wireless Communications, 2017, 16(3): 1834-1850. 无蜂窝大规模MIMO中没有小区或者小区边界的界定&#xff0c;所有接入…

位移贴图和法线贴图的区别

位移贴图和法线贴图都是用于增强模型表面细节和真实感的纹理贴图技术&#xff0c;但是它们之间也存在着差异。 1、什么是位移贴图 位移贴图&#xff1a;位移贴图通过在模型顶点上定义位移值来改变模型表面的形状。该贴图包含了每个像素的高度值信息&#xff0c;使得模型的细节…

idea compile项目正常,启动项目的时候build失败,报“找不到符号”等问题

1、首先往上找&#xff0c;看能不能找到如下报错信息 You aren’t using a compiler supported by lombok, so lombok will not work and has been disabled. 2、这种问题属于lombok编译失败导致&#xff0c;可能原因是依赖jar包没有更新到最新版本 3、解决方案 1&#xff09…

二、图像处理

待完善 一、图片缩放 import org.bytedeco.opencv.global.opencv_imgcodecs; import org.bytedeco.opencv.global.opencv_imgproc; import org.bytedeco.opencv.opencv_core.Mat; import org.bytedeco.opencv.opencv_core.Size;public class ImageResizer {public static voi…

Python —— UI自动化之八大元素定位

1、基础元素定位 1、id定位 使用html中标签的id元素去定位&#xff0c;在一般定位中优先选择&#xff0c;举例&#xff1a; from time import sleep from selenium import webdriver from selenium.webdriver.common.by import Bydriver webdriver.Firefox() driver.get(&q…

MySQ 学习笔记

1.MySQL(老版)基础 开启MySQL服务: net start mysql mysql为安装时的名称 关闭MySQL服务: net stop mysql 注: 需管理员模式下运行Dos命令 . 打开服务窗口命令 services.msc 登录MySQL服务: mysql [-h localhost -P 3306] -u root -p****** Navicat常用快捷键 键动作CTRLG设…

修炼k8s+flink+hdfs+dlink(三:安装dlink)

一&#xff1a;mysql初始化。 mysql -uroot -p123456 create database dinky; grant all privileges on dinky.* to dinky% identified by dinky with grant option; flush privileges;二&#xff1a;上传dinky。 上传至目录/opt/app/dlink tar -zxvf dlink-release-0.7.4.t…

Django REST framework API版本管理【通过GET参数传递】

API版本 在开发过程中可能会有多版本的API&#xff0c;因此需要对API进行管理。django drf中对于版本的管理也很方便。 http://www.example.com/api/v1/info http://www.example.com/api/v2/info 上面这种形式就是很常见的版本管理 在restful规范中&#xff0c;后端的API需…

css记录写一个奇怪的按钮

完成作业的时候发现一个很有意思的按钮&#xff0c;记录一下记录一下 看看界面 可以看出是一个奇形怪状的按钮&#xff0c;而且在按下的时候&#xff0c;图片和文字的颜色会改变 尝试解决 <!DOCTYPE html> <html lang"zh"> <head><meta chars…

cartographer-(0)-ubuntu(20.04)-环境安装

1.安装 ROS wiki.ros.org 1.1修改镜像源&#xff1a; 到网站上找与操作系统相匹配的镜像源 ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror # 默认注释了源码镜像以提高 apt update 速度&#xff0c;如有需要可自行取消注释 deb htt…

Linux基础指令大全

Linux基础指令大全 1. ls 指令2. pwd命令3. cd 指令4. touch指令5. mkdir指令6. rmdir指令 && rm 指令7. man指令8.cp指令9. mv指令10. cat 指令11. more指令12. less指令13. head指令14. tail指令15. 时间相关的指令1. **在显示方面&#xff0c;使用者可以设定欲显示的…

node中的crypto模块指南

node中的crypto模块指南 加密操作可能很棘手&#xff0c;以至于付费的加密服务公司的存在只是为了确保在代码库中正确实现加密操作。好消息是&#xff0c;只需学习一些知识&#xff0c;我们就可以使用 Node 的内置加密模块免费进行适当的加密。 在本指南中&#xff0c;我们将…