【备忘录】快速回忆ElasticSearch的CRUD

news2024/9/30 17:31:50

导引——第一条ElasticSearch语句

测试分词器

POST /_analyze
{
  "text":"黑马程序员学习java太棒了",
  "analyzer": "ik_smart"
}

在这里插入图片描述

概念

语法规则

HTTP_METHOD /index/_action/ID

HTTP_METHOD 是 HTTP 请求的方法,常见的包括 GET、POST、PUT、DELETE 等。
/index 是索引的名称。
/_action/ID 是操作的动作和文档的 ID。动作可以是 _search、_update、_delete 等,而 ID 则是文档的唯一标识符

HTTP_METHOD请求

GET:用于检索文档或执行搜索操作

GET /index/_search

PUT:用于创建新文档、执行搜索、执行批量操作等

PUT /index/_doc/ID
{ "field1": "value1" }

POST:创建(全量更新)或更新文档,如果文档已存在,则更新文档的全部内容
这里Elasticsearch 会自动生成文档的唯一标识符(ID),当然你也能申明指定的ID

POST /index/_doc
{ "field1": "value1" }

DELETE: 用于删除

DELETE /index/_doc/ID

ACTION 行为

在 Elasticsearch 中,_action 部分用于指定操作的动作。以下是一些常见的 _action 及其用途:

_search: 执行搜索操作,用于检索文档。

POST /index/_search

_count: 返回匹配查询条件的文档数量,但不返回文档本身。

POST /index/_count

_update: 更新文档的部分或全部内容。

POST /index/_update/ID

_delete: 删除指定 ID 的文档。

DELETE /index/_doc/ID

_bulk: 批量操作,可以一次执行多个索引、更新、删除等操作。

POST /index/_bulk
{ "index": { "_id": "1" } }
{ "field1": "value1" }
{ "update": { "_id": "2" } }
{ "doc": { "field2": "value2" } }
{ "delete": { "_id": "3" } }

_msearch: 执行多个搜索请求

POST /index/_msearch
{ }
{ "query": { "match_all": { } } }

INDEX

类似于MySQL的database

文档

类似于MySQL表中的一行

实战

索引操作

在这里插入图片描述
黑马的索引库

# 创建索引库
PUT /heima
{
  "mappings": {
    "properties": {
      "info":{
        "type":"text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type":"keyword",
        "index": "false"
      }
    }
  }
}

酒店的索引库

# 酒店的mapping
PUT /hotel
{
  "mappings": {
      "properties": {
        "id":{
          "type": "keyword"
        },
        "name":{
          "type": "text",
          "analyzer": "ik_max_word",
          "copy_to": "all"
        },
        "address":{
          "type":"keyword",
          "index": false
        },
        "price":{
          "type":"integer"
        },
        "score":{
          "type":"integer"
        },
        "brand":{
          "type": "keyword"
        },
        "city":{
          "type":"keyword"
        },
        "star_name":{
          "type": "keyword"
        },
        "business":{
          "type": "keyword",
          "copy_to": "all"
        },
        "location":{
          "type":"geo_point"
        },
        "pic":{
          "type": "keyword",
          "index": false
        },
        "all":{
          "type": "text",
          "analyzer": "ik_max_word"
        }
      }
  }

文档操作

在这里插入图片描述
在这里插入图片描述

POST /heima/_doc/1
{
  "info":"黑马程序员Java学生",
  "email":"zy@itcast.cn",
  "name":{
    "firstName":"刘",
    "lastName":"小小"
  }
}
GET /heima/_doc/1

在这里插入图片描述

查询功能拓展

全搜索

GET /hotel/_search
{
  "query": {
    "match_all": {}
  }
}
GET /hotel/_search
{
  "query": {
    "match": {
      "all": "如家"
    }
  }
}

精确搜索

GET /hotel/_search
{
  "query": {
    "term": {
      "city": "上海"
    }
  }
}

价格范围搜索

在这里插入图片描述

让用户能够先看到如家,给如家额外增加10分

# function score查询
GET /hotel/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "all": "外滩"
        }
      },
      "functions": [
        {
          "filter": {
            "term": {
              "brand": "如家"
            }
          },
          "weight": 10
        },
        {
          "filter": {
            "term": {
              "brand": "7天"
            }
          },
          "weight": 5
        }
      ],
      "boost_mode": "sum"
    }
  }
}

在这里插入图片描述

复合查询

在这里插入图片描述
Java中Match的核心四步骤
1、准备request
2、准备DSL请求参数语句
3、发送请求得到响应
4、处理响应
注意:只有DSL会改变

request.source().query(QueryBuilders.multiMatchQuery("外滩如家", "name", "brand", "city"));
request.source().query(
                QueryBuilders.boolQuery()
                        .must(QueryBuilders.termQuery("city", "杭州"))
                        .filter(QueryBuilders.rangeQuery("price").lte(250))
        );

测试类

@Test
void testMatch() throws IOException {
    // 1.准备request
    SearchRequest request = new SearchRequest("hotel");
    // 2.准备请求参数DSL
    // request.source().query(QueryBuilders.matchQuery("all", "外滩如家"));
    request.source().query(QueryBuilders.multiMatchQuery("外滩如家", "name", "brand", "city"));
    // 3.发送请求,得到响应
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 4.结果解析
    handleResponse(response);
}
private void handleResponse(SearchResponse response) {
    //解析响应
    SearchHits searchHits = response.getHits();
    // 4.1.总条数
    long total = searchHits.getTotalHits().value;
    System.out.println("总条数:" + total);
    // 4.2.获取文档数组
    SearchHit[] hits = searchHits.getHits();
    // 4.3.遍历
    for (SearchHit hit : hits) {
        // 4.4.获取source
        String json = hit.getSourceAsString();
        // 4.5.反序列化,非高亮的
        HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
        // 4.6.处理高亮结果
        // 1)获取高亮map
        Map<String, HighlightField> map = hit.getHighlightFields();
        // 2)根据字段名,获取高亮结果
        HighlightField highlightField = map.get("name");
        // 3)获取高亮结果字符串数组中的第1个元素
        if (highlightField != null) {
            String hName = highlightField.getFragments()[0].toString();
            // 4)把高亮结果放到HotelDoc中
            hotelDoc.setName(hName);
        } else {
            // 处理未找到高亮字段的情况
            hotelDoc.setName("No Highlight");
        }
        // 4.7.打印
        System.out.println(hotelDoc);
    }
}

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

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

相关文章

Flask 运用Xterm实现交互终端

Xterm是一个基于X Window System的终端仿真器&#xff08;Terminal Emulator&#xff09;。Xterm最初由MIT开发&#xff0c;它允许用户在X Window环境下运行文本终端程序。Xterm提供了一个图形界面终端&#xff0c;使用户能够在图形桌面环境中运行命令行程序。而xterm.js是一个…

物理世界中的等距3D对抗样本

论文题目&#xff1a;Isometric 3D Adversarial Examples in the Physical World 会议&#xff1a;NIPS 2022 点云&#xff1a; 点云——表达目标空间分布和目标表面特性的海量点集合&#xff0c;点包含xyz坐标信息 能够包含颜色等其他信息 使用顶点、边和面的数据表征的三维…

【操作宝典】SQL巨擘:掌握SQL Server Management的终极秘籍!

目录 ⛳️【SQL Server Management】 ⛳️1. 启动登录 ⛳️2. 忘记密码 ⛳️3. 操作数据库和表 3.1 新建数据库text 3.2 新建表 3.3 编辑表 3.4 编写脚本 ⛳️【SQL Server Management】 ⛳️1. 启动登录 需要开启服务 ⛳️2. 忘记密码 登录windows--> 安全性 -->…

基于Java SSM框架+Vue留学生交流互动论坛网站项目【项目源码+论文说明】

基于java的SSM框架Vue实现学生交流互动论坛网站演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所…

四川开启智能巡河形式,无人机水利行业应用再创新

在四川省某区域&#xff0c;复亚智能无人机系统以其独特的机场网格化部署得到成功应用&#xff0c;覆盖了该区域内多条市级、省级河流&#xff0c;成为水利行业的新亮点。这一先进系统以无人机水利行业应用为核心&#xff0c;通过网格化和信息化手段&#xff0c;实现了对水域环…

Java核心知识点整理大全19-笔记

目录 14.1.5.2. MemStore 刷盘 全局内存控制 MemStore 达到上限 RegionServer 的 Hlog 数量达到上限 手工触发 关闭 RegionServer 触发 Region 使用 HLOG 恢复完数据后触发 14.1.6.HBase vs Cassandra 15. MongoDB 15.1.1. 概念 15.1.2. 特点 16. Cassandra 16.1.1…

activate jrebel JRebel激活过程

1.下载反向代理 地址&#xff1a;https://pan.baidu.com/s/1wklvDtyrSBXE4I6lKCxXBg?pwdidos 下载完后双击运行 2.在idea中如下步骤点击&#xff1a;File ——> Setting... ——> JRebel ——> Activate now 填入Team URL 1.http://127.0.0.1:8888/uuid //这个…

用于图像分类任务的经典神经网络综述

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

电脑如何录音?适合初学者的详细教程

“电脑怎么录音呀&#xff1f;参加了一个学校举办的短视频大赛&#xff0c;视频拍摄都很顺利&#xff0c;音乐却出了问题&#xff0c;朋友说可以用电脑录制一段音乐应付一下&#xff0c;可是我不会操作&#xff0c;有哪位大佬教教我&#xff01;” 声音是一种强大的媒介&#…

回归预测 | MATLAB实现SMA+WOA+BOA-LSSVM基于黏菌算法+鲸鱼算法+蝴蝶算法优化LSSVM回归预测

回归预测 | MATLAB实现SMAWOABOA-LSSVM基于黏菌算法鲸鱼算法蝴蝶算法优化LSSVM回归预测 目录 回归预测 | MATLAB实现SMAWOABOA-LSSVM基于黏菌算法鲸鱼算法蝴蝶算法优化LSSVM回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现SMAWOABOA-LSSVM基于黏菌算法…

Ubuntu18.04磁盘取证-中难度篇

涉及的镜像文件&#xff1a; sdb.vhd uac.tar ubuntu.20211208.mem 需要利用的工具&#xff1a; volatility3 volatility2.6.1 FTK/Autopsy Strings 题干 容器是一个Ubuntu Linux 蜜罐&#xff0c;用来观察利用 CVE-2021-41773 的漏洞攻击者想要做什么。 您将看到一个 cr…

高仿IT之家微信小程序(附精选源码32套,涵盖商城团购等)

项目预览 主要包含主页资讯&#xff0c;圈子俩大模块 主页 资讯详情 圈子 相关代码 网络请求 import wx from wx import Fly from flyioconst request new Fly()request.interceptors.request.use((request) > {wx.showNavigationBarLoading()return request })requ…

Linux - 动静态库(下篇)

前言 在上篇博客当中&#xff0c;对静态库是什么&#xff0c;怎么使用&#xff0c;简单实现自己的静态库&#xff0c;这些做了描述&#xff0c;具体请看上篇博客&#xff1a; 本篇博客将会对 动态库是什么&#xff0c;怎么使用&#xff0c;简单实现自己的动态库&#xff0c…

什么是yum?

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f…

浅谈安科瑞多功能仪表和网关在中国香港某项目的应用

摘要&#xff1a;本文介绍了安科瑞多功能电能表在中国香港某项目的应用。APM系列交流多功能仪表是一款专门为电力系统、工矿企业、公用事业和智能建筑用于电力监控而设计的智能电表。 Abstract&#xff1a;This article introduces the application of the IoT power meter in…

AI超级个体:ChatGPT与AIGC实战指南

目录 前言 一、ChatGPT在日常工作中的应用场景 1. 客户服务与支持 2. 内部沟通与协作 3. 创新与问题解决 二、巧用ChatGPT提升工作效率 1. 自动化工作流程 2. 信息整合与共享 3. 提高决策效率 三、巧用ChatGPT创造价值 1. 优化产品和服务 2. 提高员工满意度和留任率…

vue3中的Fragment、Teleport、Suspense新组件

Fragment组件 在Vue2中: 组件必须有一个根标签 在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中 好处: 减少标签层级, 减小内存占用 <template><div style"font-size: 14px;"><p> 组件可以没有根标签</p&g…

EtherCAT从站XML文件组成元素详解(2):状态机

0 工具准备 1.EtherCAT从站XML文件(本文使用DM3E-556) 2.ETG.2000 S (R) V1.0.71 前言 EtherCAT从站的设备描述文件ESI(EtherCAT Slave Information)是联系主站和从站的桥梁,主站可以通过xml格式的从站设备描述文件识别从站的特征信息、获取对象字典信息、进行组态等。因此…

vue3(二)-基础入门之列表循环、数组变动检测、filter模糊查询、事件修饰符

一、列表循环 of 和 in 都是一样的效果 html代码&#xff1a; <div id"app"><ul><li v-for"item of datalist">{{ item }}</li></ul><ul><li v-for"item in dataobj">{{ item }}</li></u…

k8s安装步骤

环境&#xff1a; 操作系统&#xff1a;win10 虚拟机&#xff1a;VMware linux发行版&#xff1a;CentOS7.9 CentOS镜像&#xff1a;CentOS-7-x86_64-DVD-2009 master和node节点通信的ip(master)&#xff1a; 192.168.29.164 0.检查配置 本次搭建的集群共三个节点&#xff0c;…