elasticsearch基本语法

news2024/11/22 10:18:03

这里写自定义目录标题

    • 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.coloradmin.cn/o/1069639.html

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

相关文章

地震勘探——相关概念(一)

地震波的基本介绍 波前:波在同一时刻所到达的点所构成的面,这个面上构成的相位是相同的。波前的形状取决于传播介质的物理性质。我们可以用地震波动方程模拟波前变化(波场快照)。 射线(Ray):是…

java API 包装类Integer,int和String互相转换

integer类 package daysreplace;import com.sun.jdi.IntegerValue;import java.util.Arrays;public class Test {public static void main(String[] args) { //Integer a new Integer(29);//过时Integer b new Integer("30");//过时System.out.println(a);System.o…

matplotlib制图初级篇

做任何的报表分析,最后是达到可视化的目的。 全部都是一堆数字,那肯定不是一个合格的数据报表制作分析人员: 需求:根据excel表,生成折线图、柱状图和饼状图 1、pandas读取数据 说明:本机的运行环境为mac…

碰撞检测 Neon优化

1、碰撞检测 碰撞检测的原理,两个圆心距离d <= r1 + r2即发生碰撞, 对于下图这种,d的计算方法即为余弦定理 2、Neon优化 这段代码过于简单直接使用neon intrinsic编写 #include <arm_neon.h> #include <stdio.h>struct circle {

雷电模拟器在打开“指针位置“后,无效,没有指针xy轴坐标显示?(解决方法)

解决方法&#xff1a;雷电模拟器我甘霖娘***(不是 1. 打开"指针位置" 2. 右击雷电模拟器图标 - 打开文件所在位置 - 找到vms文件目录并进入 3. 新建名为debug的txt文件 4. 重启雷电模拟器 5. 已解决

Day08-面向对象

1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 &#xff0c;所以我们也常常说万物皆对象。 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象 类是对象的数据类型&#xff0c;类是具有相同属性和行为的一组对象的集合 简单理解&#xff1a;类就是…

集睿致远CS5518国产MIPI转LVDS 点屏方案芯片可pin to pin替代国腾GM8775C

CS5518是一款MIPI DSI输入与1或2Port LVDS输出转换芯片。Pin to Pin替换GM8775C&#xff01;MIPI DSI最多支持4Lane&#xff0c;1Lane最大运行速率为1Gbps。LVDS支持18或24位像素&#xff0c;25MHz至154MHz&#xff0c;支持VESA或JEIDA格式。单路1.8V供电方式&#xff0c;可选配…

使用VisualStudio制作上位机(补充)

使用VisualStudio制作上位机(补充) Author:YAL 这一部分,主要是补充CAN发送的实现。大概的思路是在主界面上,通过点击“VIN读写”然后弹出发送界面,用户在该界面填上信息后,点击就发送一次。当然这仅仅是一个例程,大家可以根据自己的需求来做。 先新建一个窗体,用于填…

诺贝尔奖(Nobel Prize)2023——生理/医学奖

诺贝尔奖&#x1f3c6;&#xff08;Nobel Prize&#xff09;2023——生理/医学奖 2023年10月2日颁布了诺贝尔生理学/医学奖&#xff08;Nobel Prize in Physiology or Medicine&#xff09;&#xff0c;Katalin Karik&#xff08;卡塔琳考里科&#xff09;和Drew Weissman&…

如何实现 Es 全文检索、高亮文本略缩处理

如何实现 Es 全文检索、高亮文本略缩处理 前言技术选型JAVA 常用语法说明全文检索开发高亮开发Es Map 转对象使用核心代码 Trans 接口&#xff08;支持父类属性的复杂映射&#xff09;Trans 接口的不足真实项目落地效果 前言 最近手上在做 Es 全文检索的需求&#xff0c;类似于…

postman使用旧版本报错version mismatch detected后如何恢复使用

postman下载旧版本 目前作者使用10.6.0版本可以忽略登陆&#xff0c;所以可以下载此版本。 但是安装打开后会提示version mismatch detected&#xff0c;所以需要解决该办法&#xff1b; 修改文件名称 修改 C:\Users\XXX\AppData\Roaming\Postman 为 C:\Users\XXX\AppData\R…

Python接口自动化测试实战(完整版)

接口自动化测试是指通过编写程序来模拟用户的行为&#xff0c;对接口进行自动化测试。Python是一种流行的编程语言&#xff0c;它在接口自动化测试中得到了广泛应用。下面详细介绍Python接口自动化测试实战。 1、接口自动化测试框架 在Python接口自动化测试中&#xff0c;我们…

Compose 编译器版本和Kotlin版本对应关系

使用了最新的kotlin版本&#xff0c;compose报错&#xff0c;不兼容&#xff0c;在这里记录一下版本对应关系 值得注意的是Compose Kotlin 编译器扩展 (androidx.compose.compiler) 未关联到 Compose 库版本。相反&#xff0c;它会关联到 Kotlin 编译器插件的版本&#xff0c;…

软件测试银行项目网上支付接口调用测试实例

公司最近有一个网站商城项目要开始开发了&#xff0c;这几天老板和几个同事一起开着需求会议&#xff0c; 讨论了接下来的业务规划和需求策略&#xff0c;等技术需求一下来还要讨论技术需求&#xff0c; 确认后再慢慢的进入开发阶段&#xff0c;趁着闲暇时间新造的人想总结一…

每日Leecode算法题:1337.矩阵中战斗力最弱的k行

方法1&#xff1a;暴力破解 class Solution:def kWeakestRows(self, mat: List[List[int]], k: int) -> List[int]:return sorted([i for i in range(len(mat))], keylambda x:sum(mat[x]))[:k] 方法2&#xff1a;二分查找排序 class Solution:def kWeakestRows(self, ma…

Windows配置ADB工具

一、目的 在进行嵌入式开发时&#xff0c;我们经常使用ADB工具登录到开发板上进行命令操作&#xff0c;本篇我们介绍如何在windows平台配置ADB环境。 二、实战 1.下载adb工具包​​​​​​​https://developer.android.com/studio/releases/platform-tools?hlzh-cnhttps://d…

【Git】Git下载安装环境配置 下载速度慢的解决方案

这里写自定义目录标题 介绍一、下载官网下载镜像站 二、安装安装成功 三、Git三种界面介绍Git cmd界面展示git bash界面展示git GUI界面展示 四、环境配置配置流程1、打开环境变量界面2、添加环境变量 /删除环境变量3、在变量中找到Git\cmd的值就表示配置成功4、没有找到点击新…

在硅云上主机搭建wordpress并使用Astra主题和avada主题

目录 前言 准备 操作 DNS解析域名 云主机绑定域名 安装wordpress网站程序 网站内Astra主题设计操作 安装主题 网站内avada主题安装 上传插件 上传主题 选择网站主题 前言 一开始以为云虚拟主机和云服务器是一个东西&#xff0c;只不过前者是虚拟的后者是不是虚拟的…

编程每日一练(多语言实现)基础篇:阳阳买苹果

文章目录 一、实例描述二、技术要点三、代码实现3.1 C 语言实现3.2 Python 语言实现3.3 Java 语言实现3.4 JavaScript 语言实现3.5 Go 语言实现 一、实例描述 阳阳买苹果&#xff0c;每个苹果0.8元&#xff0c;阳阳第一天买2个苹果&#xff0c;第二天开始每天买前一天的2倍&am…

双端队列--二叉树 Z 字层序遍历

力扣103题----二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 代码&#xff1a; public L…