Elasticsearch【文档操作、搜索操作、入门案例】(五)-全面详解(学习总结---从入门到深化)

news2024/9/20 22:32:33

目录

原生JAVA操作ES_文档操作

原生JAVA操作ES_搜索操作

SpringDataES_入门案例


原生JAVA操作ES_文档操作

新增&修改文档 

@Test
public void addDocument() throws IOException
{
    // 1.创建客户端对象,连接ES
    RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.0.187", 9200, "http")));
    // 2.创建请求对象
    IndexRequest request = new IndexRequest("student").id("1");
    request.source(XContentFactory.jsonBuilder()
                   .startObject()
                   .field("id", 1)
                   .field("name", "i love xiaotong")
                   .field("age", 20)
                   .endObject());
    // 3.发送请求
    IndexResponse response = client.index(request, RequestOptions.DEFAULT);
    // 4.操作响应结果
    System.out.println(response.status());
    // 5.关闭客户端
    client.close();
}

根据id查询文档

// 根据id查询文档
@Test
public void findByIdDocument() throws IOException {
    // 1.创建客户端对象,连接ES
    RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.0.187", 9200, "http")));
    // 2.创建请求对象
    GetRequest request = new GetRequest("student", "1");
    // 3.发送请求
    GetResponse response = client.get(request, RequestOptions.DEFAULT);
    // 4.操作响应结果
    System.out.println(response.getSourceAsString());
    // 5.关闭客户端
    client.close();
}

删除文档

// 删除文档
@Test
public void DeleteDocument() throws IOException {
    // 1.创建客户端对象,连接ES
    RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.0.187", 9200, "http")));
    // 2.创建请求对象
    DeleteRequest request = new DeleteRequest("student", "1");
    // 3.发送请求
    DeleteResponse response = client.delete(request,RequestOptions.DEFAULT);
    // 4.操作响应结果
    System.out.println(response.status());
    // 5.关闭客户端
    client.close();
}

实时学习反馈

1. 使用原生JAVA操作ES时,删除文档的请求对象为

A DeleteRequest

B GetRequest

C IndexRequest

D SearchRequest

2. 使用原生JAVA操作ES时,新增文档的请求对象为

A DeleteRequest

B GetRequest

C IndexRequest

D SearchRequest

原生JAVA操作ES_搜索操作

搜索所有文档 

@Test
public void queryAllDocument() throws IOException {
    // 创建客户端对象,链接ES
    RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(new HttpHost("192.168.1.58",9200,"http")));
    // 创建搜索条件
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    // 创建请求对象
    SearchRequest request = new SearchRequest("student").source(searchSourceBuilder);
    // 发送请求
    SearchResponse response = client.search(request,RequestOptions.DEFAULT);
    // 输出返回结果
    for (SearchHit hit:response.getHits()) {
        System.out.println(hit.getSourceAsString());
   }
    // 关闭客户端
    client.close();
}

根据关键词搜索文档

@Test
public void queryTermDocument() throws IOException {
    // 创建客户端对象,链接ES
    RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(new HttpHost("192.168.1.58",9200,"http")));
    // 创建请求条件
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.termQuery("info","boy"));
    // 创建请求对象
    SearchRequest request = new SearchRequest("student").source(searchSourceBuilder);
    // 发送请求
    SearchResponse response = client.search(request,RequestOptions.DEFAULT);
    // 输出返回结果
    for (SearchHit hit:response.getHits()) {
      System.out.println(hit.getSourceAsString());
   }
    // 关闭客户端
    client.close();
}

实时学习反馈

1. 使用原生JAVA操作ES时,查询文档的请求对象为

A DeleteRequest

B GetRequest

C IndexRequest

D SearchRequest

SpringDataES_入门案例

项目搭建

Spring Data ElasticSearch是Spring对原生JAVA操作Elasticsearch 封装之后的产物。它通过对原生API的封装,使得JAVA程序员可以简 单的对Elasticsearch进行操作。

1、创建SpringBoot项目,加入Spring Data Elasticsearch起步依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

 2、编写配置文件:

spring:
 elasticsearch:
   uris: http://192.168.1.58:9200

此时Spring Data ElasticSearch项目已经搭建完成。

创建实体类

一个实体类的所有对象都会存入ES的一个索引中,所以我们在创建 实体类时关联ES索引。

@Document(indexName = "product",createIndex = true)
@Data
public class Product {
    @Id
    @Field(type = FieldType.Integer,store = true,index = true)
    private Integer id;
    @Field(type = FieldType.Text,store = true,index = true,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    private String productName;
    @Field(type = FieldType.Text,store = true,index = true,analyzer ="ik_max_word",searchAnalyzer = "ik_max_word")
    private String productDesc;
}

@Document:标记在类上,标记实体类为文档对象,一般有如 下属性:

            indexName:对应索引的名称

            createIndex:是否自动创建索引

@Id:标记在成员变量上,标记一个字段为主键,该字段的值会 同步到ES该文档的id值。

@Field:标记在成员变量上,标记为文档中的域,一般有如下 属性:

            type:域的类型

            index:是否创建索引,默认是 true store:是否单独存储,默认是 false

            analyzer:分词器

            searchAnalyzer:搜索时的分词器

实时学习反馈

1. 在Spring Data ElasticSearch中,实体类上方添加的注解为

A @Entity

B @Bean

C @Document

D @Repository

2. 在Spring Data ElasticSearch中,实体类成员变量上方添加的 注解为

A @Field

B @Bean

C @Document

D @Id 

复习:

 Elasticsearch常用操作_域的属性

index

该域是否创建索引。只有值设置为true,才能根据该域的关键词查询文档。

// 根据关键词查询文档
GET /索引名/_search
{
  "query":{
        "term":{
           搜索字段: 关键字
       }
   }
}

 type

域的类型

store 

是否单独存储。如果设置为true,则该域能够单独查询。

// 单独查询某个域:
GET /索引名/_search
{
  "stored_fields": ["域名"]
}

实时学习反馈

1. 在Elasticsearch中,只有域的属性设置为true,才能根据该域 的关键词查询文档

A type

B index

C store

D analyzer

2. 在Elasticsearch中,域的属性表示域的数据类型

A type

B index

C store

D analyzer

分词器_默认分词器

ES文档的数据拆分成一个个有完整含义的关键词,并将关键词与文 档对应,这样就可以通过关键词查询文档。要想正确的分词,需要 选择合适的分词器。

standard analyzer:Elasticsearch默认分词器,根据空格和标点 符号对英文进行分词,会进行单词的大小写转换。 

默认分词器是英文分词器,对中文的分词是一字一词。

查看分词效果

GET /_analyze
{
  "text":测试语句,
  "analyzer":分词器
}

 实时学习反馈

1. 在Elasticsearch中,默认分词器为

A standard analyzer

B IKAnalyzer

C pinyin analysis

D 没有默认分词器

2. 在Elasticsearch中,默认分词器对中文的分词

A 根据标点符号分词

B 根据空格符号分词

C 根据词汇分词

D 一字一词

分词器_IK分词器

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词 工具包。提供了两种分词算法:

1、ik_smart:最少切分

2、ik_max_word:最细粒度划分 

安装IK分词器

1、关闭es服务

2 、使用rz命令将ik分词器上传至虚拟机

注:ik分词器的版本要和es版本保持一致。

3、解压ik分词器到elasticsearch的plugins目录下

unzip elasticsearch-analysis-ik-7.17.0.zip -d /usr/local/elasticsearch1/plugins/analysis -ik

4、启动ES服务 

su es

#进入ES安装文件夹:
cd /usr/local/elasticsearch1/bin/

#启动ES服务:
./elasticsearch -d

测试分词器效果

GET /_analyze
{
 "text":"测试语句",
 "analyzer":"ik_smart/ik_max_word"
}

IK分词器词典

IK分词器根据词典进行分词,词典文件在IK分词器的config目录中。

1、main.dic:IK中内置的词典。记录了IK统计的所有中文单词。

2、IKAnalyzer.cfg.xml:用于配置自定义词库。

<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict">ext_dict.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords">ext_stopwords.dic</entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

实时学习反馈

1. IK分词器的算法分为

A ik_smart 和 ik_min_word

B ik_min_word 和 ik_max_word

C ik_smart 和 ik_max_word

D ik_smart 和 ik_max_word 和 ik_min_word

2. 在Elasticsearch中,测试分词器效果的方法为

A PUT /_analyze

B GET /_analyze

C POST /_analyze

D DELETE /_analyze 

分词器_拼音分词器

拼音分词器可以将中文分成对应的全拼,全拼首字母等。

安装拼音分词器

1、 关闭es服务

2 、使用rz命令将拼音分词器上传至虚拟机

注:拼音分词器的版本要和es版本保持一致。

3、解压ik分词器到elasticsearch的plugins目录下 

unzip elasticsearch-analysis-pinyin-7.17.0.zip -d /usr/local/elasticsearch1/plugins/analysis -pinyin

4、启动ES服务

su es

#进入ES安装文件夹:
cd /usr/local/elasticsearch1/bin/

#启动ES服务:
./elasticsearch

测试分词效果

GET /_analyze
{
 "text":测试语句,
 "analyzer":pinyin
}

实时学习反馈

1. 在Elasticsearch中,分词器存放的目录为

A bin

B config

C plugins

D log

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

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

相关文章

API安全基础理论

1.什么是API API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节。通过淘宝API&#xff0c;就…

测试完OLED屏对比LCD屏后:液晶面板拥趸们无话可说了

关于笔记本的屏幕&#xff0c;从大的技术上来分类可以分成两类&#xff0c;一种是OLED材质&#xff0c;另外一种是LCD材质。前些年的笔记本基本都采用的是LCD材质&#xff0c;但近几年随着OLED屏幕的崛起&#xff0c;大多数笔记本都采用了OLED材质。 那么&#xff0c;你知道LCD…

ChatGPT能为留学生做什么?错误使用有何后果?

随着AI人工智能行业的迅速发展&#xff0c;越来越多的学生开始利用ChatGPT等软件来获得更高效便利的论文和作业辅助。 然而&#xff0c;我们需要认识到一个严肃的问题&#xff1a;学生是否过度依赖AI助手来完成毕业论文。 近期出现的Turnitin AI Detector是一个用于帮助教师确…

Xamarin.Android | 界面跳转到手机自带的自启动管理界面,引导用户将APP加入自启动

Xamarin.Android | 界面跳转到手机自带的自启动管理界面&#xff0c;引导用户将APP加入自启动 文章目录 Xamarin.Android | 界面跳转到手机自带的自启动管理界面&#xff0c;引导用户将APP加入自启动前言示例代码自启动界面URI字典打开自启动管理界面 结束语 前言 很多 Androi…

【算法 -- LeetCode】(14) 最长公共前缀

1、题目 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 1&#xff1a; 输入&#xff1a;strs [“flower”,“flow”,“flight”] 输出&#xff1a;“fl” 示例 2&#xff1a; 输入&#xff1a;strs [“dog”,“…

【unity实战】使用shader和shader Graph实现2d图片描边效果(附源码)

文章目录 前言Shader1. 内描边2. 外描边 Shader Graph1. 2d图片描边2. 带炫光的2d图片描边 最终演示效果源码参考完结 前言 最近在学习shader Graph相关内容&#xff0c;其实关于实现2d图片描边效果&#xff0c;网上可以看到很多教程&#xff0c;但是我发现大多数都是基于比较…

2023最新整理的 Elasticsearch 21道面试题

1、为什么要使用 Elasticsearch? 系统中的数据&#xff0c; 随着业务的发展&#xff0c; 时间的推移&#xff0c; 将会非常多&#xff0c;而业务中往往采用模糊查询进行数据的 搜索&#xff0c;而模糊查询会导致查询引擎放弃索引&#xff0c; 导致系统查询数据时都是全表扫描&…

Unity3D 场景添加obj模型

有一个立方体的obj模型&#xff1b;将其拖到Assets文件夹节点上&#xff0c;在此节点放手&#xff0c;资源被加入项目&#xff1b; 在右侧显示出对象概览&#xff1b; 点击箭头&#xff0c;显示此模型下的子对象&#xff1b; 然后按住Assets面板中的cube1对象&#xff0c;拖动…

3分钟阿里云轻量应用服务器和云服务器的区别对比

阿里云服务器ECS和轻量应用服务器有什么区别&#xff1f;云服务器ECS是明星级云服务器&#xff0c;轻量应用服务器可以理解为简化版的云服务器ECS&#xff0c;轻量适用于单机应用&#xff0c;云服务器ECS适用于集群类高可用高容灾应用&#xff0c;阿里云百科来详细说下阿里云轻…

科研论文中SCI,SSCI ,CSSCI是什么

目录 1 SCI 2 SSCI 3 CSSCI 什么是SCI&#xff0c;SSCI &#xff0c;CSSCI 目前&#xff0c;在国际科学界&#xff0c;如何正确评价基础科学研究成果已引起越来越广泛的关注。而被SCI、SSCI收录的科技论文的多寡则被看作衡量一个国家的基础科学研究水平、科技实力和科技论文水平…

以太网之IP协议(七)

目录 一、IP协议的功能 1.1 IP地址 1.2 IP路由 1.2.1 路由原理 1.2.2 路由控制表 1.3 IP分包与组包 二、IP地址 2.1 IP地址分类 2.2 多播地址 2.2.1 广播地址 2.2.2 组播地址 2.3 子网掩码 三、IP帧格式 一、IP协议的功能 数据链路层提供直连两个设备之间的通信功…

【Linux系统编程】Linux编辑器——vim

文章目录 1. 什么是vim2. vim的常用模式3. vim的基本操作4. vim命令集4.1 命令模式命令集复制粘贴依次撤销上一次操作对撤销进行撤销&#xff08;恢复&#xff09;剪切&删除移动光标&#xff08;上下&#xff09;移动光标&#xff08;左右&#xff09;文本内容大小写切换替…

javaTCP数据报套接字编程

TCP套接字编程 1.ServerSocket API1.1ServerSocket 的构造方法1.2ServerSocket 方法&#xff1a; 2.Socket API2.1Socket构造方法2.2Socket方法 3.TCP回显服务器4.TCP中的长短连接5.C10M问题 TCP提供的API主要有两个类&#xff1a;一个是专门给服务器用的SeverSocket对象&#…

MyBatis-Plus框架

说明&#xff1a;Mybaits-Plus是Mybatis框架的升级&#xff0c;该框架提供了一系列API&#xff0c;用于操作数据&#xff0c;可以免受手搓SQL语句的痛苦。 一、使用 第一步&#xff1a;添加依赖 使用前&#xff0c;需先添加对应的依赖&#xff0c;建议使用最新的版本 <d…

有什么事让你觉得在Linux上顺理成章,换到Windows上就令你费解?

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

Linux红帽认证适合哪些人学习

近几年来&#xff0c;技术的迭代速度越来越快&#xff0c;云计算&#xff0c;大数据&#xff0c;人工智能&#xff0c;物联网等技术扑面而来&#xff0c;全球各大互联网公司都在抢先发展这些技术&#xff0c;而无一例外的这些技术背后都是使用的Linux系统&#xff0c;双11&…

JAVA_SSM Demo(WEB端)

仓库地址&#xff1a;https://gitee.com/ThMyGitee/SSMDemo.git CSDN的友友们&#xff0c;项目如果适合您的话&#xff0c;麻烦给个小小的Star&#xff0c;谢谢啦&#xff01; JAVA_SSM Demo(WEB端) 1.开发环境 JDK1.8 Tomcat 8.5.60 IDEA 2019.3 MySQL 5.7.20 Maven 3.6 S…

USB协议总结

1、简介 在了解USB协议之前&#xff0c;先了解下该总线协议出现的背景。在USB总线出现之前&#xff0c;计算机与键盘、鼠标、扫描仪、打印机都使用专用的接口连接&#xff0c;不同设备的接口不能互用&#xff0c;扩展性很差。每次插拔设备都要关闭计算机&#xff0c;不支持热插…

【Matlab】智能优化算法_麻雀搜索算法SSA

【Matlab】智能优化算法_麻雀搜索算法SSA 1.背景介绍2.数学模型3.文件结构4.伪代码5.详细代码及注释5.1 Get_Functions_details.m5.2 main.m5.3 SSA.m 6.运行结果7.参考文献 1.背景介绍 麻雀通常是群居的鸟类&#xff0c;有很多种类。它们分布在世界的大部分地区&#xff0c;喜…

TI毫米波雷达软硬件概述

TI毫米波雷达概述 1.TI毫米波雷达传感器芯片及分类&#xff1a;1.1 工业毫米波雷达传感器器件选型应用场景 1.2 汽车毫米波雷达选型使用场景 1.3 基于AWR2243 的 TI 级联雷达 &#xff1a;1.4 不喜欢看文字的也可以戳视频-> 2. TI软件入门概述&#xff1a;2.1 TI RadarToolb…