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

目录

原生JAVA操作ES_文档操作

原生JAVA操作ES_搜索操作

SpringDataES_入门案例


原生JAVA操作ES_文档操作

新增&修改文档 

@Test
public void addDocument() throws IOException
{// 1.创建客户端对象,连接ESRestHighLevelClient 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.创建客户端对象,连接ESRestHighLevelClient 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.创建客户端对象,连接ESRestHighLevelClient 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 {// 创建客户端对象,链接ESRestHighLevelClient 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 {// 创建客户端对象,链接ESRestHighLevelClient 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.hqwc.cn/news/15624.html

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

相关文章

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

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

如何在word的横线中插入大量文字(探索)

发现选中文字&#xff0c;按ctrlu即可把文字都添上下划线&#xff0c;但这样的效果不是我想要的。 这是一行一行的单元格。 暂时没有很好的方法&#xff0c;我的方法源自我的同学&#xff0c;是个笨方法。 先有一个纯文字word。 把它们全放到目标框中&#xff1a; 这样就限…

从粗放到精细,水务大数据运营分析平台助力智慧水务建设升级

随着国家对环保、节水的监管力度加大&#xff0c;水务物联网建设进入了快速发展期。大量的物联感知设备产生了海量的生产和业务数据&#xff0c;但大部分水务企业由于缺乏对数据的整合利用&#xff0c;数据价值没有得到充分挖掘&#xff0c;还不能通过精准的预测和分析&#xf…

Navicat 备份和恢复MongoDB库的数据

1、前期准备 (1) 有数据的MongoDB数据库old_db、空数据库new_db (2) 准备好MongoDB Tools 前往页面&#xff1a;https://www.mongodb.com/try/download/database-tools 选择所需版本下载并解压到自己想要的目录中&#xff1a; 2、将数据库old_db中的数据备份导出 (1) 对old_db…

map、foreach 和 for ,多角度对比

for 1.访问元素和操作方式------通过索引访问数组元素&#xff0c;并可以执行任意操作。 const numbers [1, 2, 3, 4, 5];// for循环示例 for (let i 0; i < numbers.length; i) {console.log("Number (for loop): " numbers[i]); } 2.索引控制--------通过…

直流运算放大电路-----Howland(二)

目录 豪兰德电路形式1 电路图 计算公式 仿真与分析 豪兰德电路形式2 电路图 计算公式 豪兰德电路形式3 电路图 计算公式 改进电路 豪兰德电路形式1 模拟电子技术基础&#xff08;第五版&#xff09;5.7 电路图 计算公式 仿真与分析 如图&#xff0c;红框内为负反馈&…

【数据结构与算法】图课后习题

题目 下面一共有七道有关图的课后习题&#xff0c;全部都是思路画图题并不是算法设计题故在此就一起列举出来了~ 1. 已知如下图所示的有向图&#xff0c;请回答下面几个问题 每个顶点的入/出度&#xff1b;邻接矩阵&#xff1b;邻接表&#xff1b;逆邻接表&#xff1b;强连通…

AcWing 1497:树的遍历

【题目来源】https://pintia.cn/problem-sets/994805342720868352/exam/problems/994805485033603072https://www.acwing.com/problem/content/description/1499/【题目描述】 一个二叉树&#xff0c;树中每个节点的权值互不相同。 现在给出它的后序遍历和中序遍历&#xff0c;…

Python爬虫与数据挖掘在外汇市场分析中的应用

外汇市场是全球最大的金融市场之一&#xff0c;每天的交易量可以达到几万亿美元。深入了解外汇市场的趋势和变化对于投资者来说至关重要&#xff0c;因为即使是微小的价格波动也可能导致巨额利润或损失。从过去的历史数据中抽取经验教训&#xff0c;并使用数据挖掘算法来预测未…

MOS管结构--NMOS、PMOS、CMOS、NAND、NOR、latch up(闩锁效应) 、Channel Length vs Gate Length

文章目录 NMOSPMOSCMOS (Complementary Metal Oxide Semiconductor)NAND&#xff08;与非门&#xff09;NAND layout NOR&#xff08;或非门&#xff09;latch up&#xff08;闩锁效应&#xff09;Channel Length vs Gate Length NMOS 如果硅区域中掺杂了具有五价电子&#xff…

Kotlin~Command模式

概念 把请求转化为独立的对象 角色介绍 Command: 命令接口ConcreteCommand: 具体命令实现类 UML 代码实现 interface Command {fun execute(vararg arg: String):Int } class Print : Command {override fun execute(vararg arg: String): Int {println("Print:${arg…

一些行业报告--From 艾瑞咨询

一些行业报告--From 艾瑞咨询 1 介绍2 机械臂行业研究 [From 艾瑞咨询 -- 中国工业机器人行业研究报告&#xff08;2023&#xff09;2.1 发展历程2.2 中国工业机器人相关政策2.3 产业链2.4 三大部分六大系统2.5 伺服&控制器 主要玩家 及 关键指标及难点2.6 减速机 主要玩家…