当前位置: 首页 > news >正文

合肥做网站便宜mdyun在百度怎么免费发布广告

合肥做网站便宜mdyun,在百度怎么免费发布广告,现在学ui设计就业前景,农村自建房设计图效果图目录 初识elasticsearch 什么是elasticsearch elasticsearch的发展 Lucene的优缺点 elasticsearch的优势 倒排索引 es与mysql的概念对比 文档 索引 概念对比 架构 安装es 安装kibana 安装ik分词器 分词器 安装ik分词器 ik分词器的拓展和停用词典 操作索引库…

目录

初识elasticsearch

什么是elasticsearch

elasticsearch的发展

Lucene的优缺点

elasticsearch的优势

倒排索引 

es与mysql的概念对比

文档

索引

概念对比

架构

安装es

安装kibana

安装ik分词器 

分词器

安装ik分词器

ik分词器的拓展和停用词典

操作索引库

mapping属性

创建索引库

查询、删除、修改索引库

文档操作

新增查询删除文档

修改文档

方法一:全量修改

方法二:增量修改

RestClient的操作

什么是RestClient

hotel数据结构分析

索引库操作

初始化JavaRestClient

创建索引库

删除索引库

判断索引库是否存在

文档操作

初始化JavaRestClient

添加文档

查询文档

修改文档

删除文档

批量导入文档


什么是elasticsearch?
1、一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能
什么是elastic stack (ELK) ?
2、是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch
什么是Lucene?
3、是Apache的开源搜索引擎类库,提供了搜索引擎的核心API


什么是文档和词条?

1、每一条数据就是一个文档
2、对文档中的内容分词,得到的词语就是词条
什么是正向索引?
1、基于文档id创建索引。查询词条时必须先找到文档,而后判断是否包含词条
什么是倒排索引?
1、对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条查询到文档id,而后获取到文档


文档:一条数据就是一个文档,es中是Json格式
字段:Json文档中的字段
索引:同类型文档的集合
映射:索引中文档的约束,比如字段名称、类型
elasticsearch与数据库的关系:
1、数据库负责事务类型操作
2、elasticsearch负责海量数据的搜索、分析、计算


分词器的作用是什么?
1、创建倒排索引时对文档分词
2、用户搜索时,对输入的内容分词
IK分词器有几种模式?
1、ik_smart:智能切分,粗粒度

2、ik_max_word:最细切分,细粒度
IK分词器如何拓展词条?如何停用词条?
1、利用config目录的lkAnalyzer.cfg.xml文件添加拓展词典和停用词典

2、在词典中添加拓展词条或者停用词条


mapping常见属性有哪些?

1、type:数据类型
2、index:是否索引

3、analyzer:分词器

4、properties:子字段

type常见的有哪些?

1、字符串:text、keyword
2、数字:long、integer、short、 byte、double、float

3、布尔:boolean
4、日期:date
5、对象:object


索引库操作有哪些?
1、创建索引库:PUT/索引库名
2、查询索引库:GET/索引库名
3、删除索引库:DELETE/索引库名
4、添加字段:PUT/索引库名/_mapping


文档操作有哪些?
1、创建文档:POST/索引库名/_doc/文档id { json文档}
2、查询文档:GET/索引库名/_doc/文档id
3、删除文档:DELETE/索引库名/_doc/文档id
4、修改文档:
全量修改:PUT/索引库名/_doc/文档id { json文档}
增量修改:POST/索引库名/_update/文档id { "doc":{字段}}


索引库操作的基本步骤:
1、初始化RestHighLevelClient
2、创建XxxIndexRequest。XXX是CREATE、Get、Delete
3、准备DSL ( CREATE时需要)
4、发送请求。调用RestHighLevelClient#tindices().xxx()方法,xxx是create、exists、delete


文档操作的基本步骤:
1、初始化RestHighLevelClient
2、创建XxxRequest。XXX是Index、Get、Update、Delete
3、准备参数((Index和Update时需要)
4、发送请求。调用RestHighLevelClient#t.xxx()方法,xxx是index、get、update、delete
5、解析结果(Get时需要)

初识elasticsearch

什么是elasticsearch

elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。

elasticsearch结合kibana、Logstash、Beats,也就是elastic stack (ELK)。被广泛应用在日志数据分析、实时监控等领域。
elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。

elasticsearch的发展

Lucene的优缺点

Lucene的优势:

1、易扩展
2、高性能(基于倒排索引)

Lucene的缺点:
1、只限于Java语言开发

2、学习曲线陡峭
3、不支持水平扩展 

elasticsearch的优势

相比与lucene, elasticsearch具备下列优势:

1、支持分布式,可水平扩展
2、提供Restful接口,可被任何语言调用

倒排索引 

elasticsearch采用倒排索引:
1、文档(document):每条数据就是一个文档

2、词条(term):文档按照语义分成的词语

es与mysql的概念对比

文档

1、elasticsearch是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。

2、文档数据会被序列化为json格式后存储在elasticsearch中。 

索引

索引 ( index):相同类型的文档的集合
映射(mapping):索引中文档的字段约束信息,类似表的结构约束

概念对比

MySQLElasticsearch说明
TableIndex索引(index),就是文档的集合,类似数据库的表(table)
RowDocument文档(Document),就是一条条的数据,类似数据库中的行(ROW),文档都是JSON格式
ColumnField字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)
SchemaMappingMapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)
SQLDSLDSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

架构

Mysql:擅长事务类型操作,可以确保数据的安全和一致性

Elasticsearch:擅长海量数据的搜索、分析、计算

安装es

创建网络:es-net是自己取的名字,随便取

docker network create es-net

加载镜像:使用提供的es.tar,拖到虚拟机的tmp目录下  

es.taricon-default.png?t=N7T8https://pan.baidu.com/s/13Z74D-liQaDL0_tM-Rl7Rg?pwd=47qm运行加载命令:

docker load -i es.tar

运行docker命令:

docker run -d \
    --name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

访问网页:虚拟机ip和9200端口。成功

安装kibana

加载镜像:使用提供的es.tar,拖到虚拟机的tmp目录下  

kibanaicon-default.png?t=N7T8https://pan.baidu.com/s/1N3NiLRxLzX42jMxkK9ackQ?pwd=lh2y运行docker命令

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1

访问网页:虚拟机ip和5601端口。成功

点击主页的Explore on my own后,打开Dev Tools

模拟一次请求:可以看到右边的数据和端口9200的数据一模一样 

安装ik分词器 

分词器

es在创建倒排索引时需要对文档分词;在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。

语法说明:
POST:请求方式
/_analyze:请求路径

请求参数,json风格:analyzer:分词器类型。text:要分词的内容 

我们可以看到:右边的数据分词并不友好,比如:世界本应该是一起的,它却分开了

安装ik分词器

查看es-plugins数据卷所在的位置

docker volume inspect es-plugins 

把ik文件夹放到该路径:Mountpoint就是要的位置

ik文件夹icon-default.png?t=N7T8https://pan.baidu.com/s/1EIkGJDvVjcGx06hDUo34Eg?pwd=dads重启es

docker restart es

测试

ik_smart:最少切分

ik_max_word:最细切分  

ik_smart:从最多字开始判断是否切分,若切分,则不会再继续判断已被切分的词是否继续切分 

ik_max_word:会判断每个词是否能再继续分 

ik分词器的拓展和停用词典

修改一个ik分词器目录中的config目录中的lkAnalyzer.cfg.xml文件

在第一个箭头这行,添加ext.dic:这是要用来拓展词典的文件,要在lkAnalyzer.cfg.xml所在的同级目录下创建出来。

在第二个箭头这行,添加stopword.dic:这是要用来停用词典的文件,在lkAnalyzer.cfg.xml所在的同级目录已经创建好了,不需要再创建。

在ext.dic添加要拓展的词典

在stopword.dic添加要停用的词典

重启es:这次重启后,需要几十秒的时间才能访问网站,否则网站会报错

docker restart es 

再次访问网站,可以看到这次测试“奥利给”并没有被分开,并且“的”字并没有出现在右边。

是因为“奥利给”被写进了ext.dic, “的”被写进了stopword.dic

操作索引库

mapping属性

mapping是对索引库中文档的约束,常见的mapping属性包括:

1、type:字段数据类型,常见的简单类型有:
1.1、字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)

1.2、数值:long、integer、short、byte、double、float

1.3、布尔:boolean
1.4、日期:date

1.5、对象:object

2、index:是否创建索引,默认为true

3、analyzer:使用哪种分词器
4、properties:该字段的子字段

创建索引库

这里创建了一个名叫heima的索引库,mappings代表它是做映射的,properties代表里面是具体的字段,type代表该字段的数据类型,analyzer代表该字段的分词器,index代表该字段是否创建索引

PUT /heima
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email": {
        "type": "keyword",
        "index": false
      },
      "name": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "keyword"
          },
          "lastName": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

运行该DSL语句后,右边会出现创建的索引库名字,代表创建成功

查询、删除、修改索引库

查看索引库语法

GET /索引库名称 

删除索引库语法 

DELETE /索引库名

索引库和mapping一旦创建无法修改,但是可以添加新的字段

PUT /索引库名称/_mapping
{
  "properties": {
    "新字段名": {
    }
  }
}

文档操作

新增查询删除文档

新增文档语法

POST /索引库名/_doc/文档id
{
  "字段1": "值1",
  "字段2": "值2",
  "字段3": {
    "子属性1": "值3",
    "子属性2": "值4"
  }
}

新增文档,右边的数据result为created。成功 

查询文档语法

GET /索引库名/_doc/文档id 

查询文档,右边会出现文档的数据。成功

删除文档语法

DELETE /索引库名/_doc/文档id

删除文档,右边数据result为deleted,成功 

修改文档

方法一:全量修改

会删除旧文档,添加新文档

PUT /索引库名/_doc/文档id
{
  "字段1": "值1",
  "字段2": "值2"

当文档存在时:修改后,右边的数据result为updated。修改成功

当文档不存在时:修改变成了创建。

方法二:增量修改

修改指定的字段,注意只能写指定的字段,而不是把所有字段都写上

POST /索引库名/_update/文档id
{
  "doc": {
    "字段1": "值1"
  }

修改后,右边的result为updated。修改成功 

RestClient的操作

什么是RestClient

ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。

下载提供的资料

hotel的demo和sqlicon-default.png?t=N7T8https://pan.baidu.com/s/1uxl7PzshHu09PXsd9zDWbA?pwd=v8bf在本地新建一个数据库:heima,若使用其他数据库名,记得在demo里修改yml文件 

hotel数据结构分析

写出数据库中该表的DSL语句,但是不要执行。我们要使用java来执行

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",
        "copy_to": "all"
      },
      "city": {
        "type": "keyword"
      },
      "starName": {
        "type": "keyword"
      },
      "business": {
        "type": "keyword",
        "copy_to": "all"
      },
      "location": {
        "type": "geo_point"
      },
      "pic": {
        "type": "keyword",
        "index": false
      },
      "all": {
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }

索引库操作

初始化JavaRestClient

在hotel.pom文件中引入es的RestHighLevelclient依赖

<!--elasticsearch-->
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

因为SpringBoot默认的ES版本是7.6.2,所以我们需要覆盖默认的ES版本

<properties><java.version>1.8</java.version><elasticsearch.version>7.12.1</elasticsearch.version>
</properties> 
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>cn.itcast.demo</groupId><artifactId>hotel-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>hotel-demo</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><elasticsearch.version>7.12.1</elasticsearch.version></properties><dependencies><!--elasticsearch--><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><!--FastJson--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.71</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

初始化RestHighLevelClient:xxx填虚拟机ip

RestHighLevelclient client = new RestHighLevelclgent(RestClient.builder(
        HttpHost.create( "http://xxx.xxx.xxx.xxx:9200")
) );

该代码我写成了

@BeforeEach
void setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")));
}@AfterEach
void tearDown() throws IOException {this.client.close();
}
package cn.itcast.hotel;import net.sf.jsqlparser.statement.create.index.CreateIndex;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;import java.io.IOException;import static cn.itcast.hotel.constants.HotelConstants.MAPPING_TEMPLATE;public class HotelIndexTest {private RestHighLevelClient client;@Testvoid testInit() {System.out.println(client);}@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

创建索引库

这个MAPPING_TEMPLATE的位置是要填写DSL语句,但因为太长,我就把它写成了常量

@Test
void createHotelIndex() throws IOException {//1、创建Request对象CreateIndexRequest request = new CreateIndexRequest("hotel");//2、准备请求的参数,DSL语句request.source(MAPPING_TEMPLATE, XContentType.JSON);//3、发送请求client.indices().create(request, RequestOptions.DEFAULT);
} 
package cn.itcast.hotel;import net.sf.jsqlparser.statement.create.index.CreateIndex;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;import java.io.IOException;import static cn.itcast.hotel.constants.HotelConstants.MAPPING_TEMPLATE;public class HotelIndexTest {private RestHighLevelClient client;@Testvoid testInit() {System.out.println(client);}@Testvoid createHotelIndex() throws IOException {//1、创建Request对象CreateIndexRequest request = new CreateIndexRequest("hotel");//2、准备请求的参数,DSL语句request.source(MAPPING_TEMPLATE, XContentType.JSON);//3、发送请求client.indices().create(request, RequestOptions.DEFAULT);}@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}
public static final String MAPPING_TEMPLATE = "";
package cn.itcast.hotel.constants;public class HotelConstants {public static final String MAPPING_TEMPLATE = "{\n" +"  \"mappings\": {\n" +"    \"properties\": {\n" +"      \"id\": {\n" +"        \"type\": \"keyword\"\n" +"      },\n" +"      \"name\": {\n" +"        \"type\": \"text\",\n" +"        \"analyzer\": \"ik_max_word\",\n" +"        \"copy_to\": \"all\"\n" +"      },\n" +"      \"address\": {\n" +"        \"type\": \"keyword\",\n" +"        \"index\": false\n" +"      },\n" +"      \"price\": {\n" +"        \"type\": \"integer\"\n" +"      },\n" +"      \"score\": {\n" +"        \"type\": \"integer\"\n" +"      },\n" +"      \"brand\": {\n" +"        \"type\": \"keyword\",\n" +"        \"copy_to\": \"all\"\n" +"      },\n" +"      \"city\": {\n" +"        \"type\": \"keyword\"\n" +"      },\n" +"      \"starName\": {\n" +"        \"type\": \"keyword\"\n" +"      },\n" +"      \"business\": {\n" +"        \"type\": \"keyword\",\n" +"        \"copy_to\": \"all\"\n" +"      },\n" +"      \"location\": {\n" +"        \"type\": \"geo_point\"\n" +"      },\n" +"      \"pic\": {\n" +"        \"type\": \"keyword\",\n" +"        \"index\": false\n" +"      },\n" +"      \"all\": {\n" +"        \"type\": \"text\",\n" +"        \"analyzer\": \"ik_max_word\"\n" +"      }\n" +"    }\n" +"  }\n" +"}";
}

运行测试代码,可以看到控制台运行成功。

删除索引库

@Test
void testDeleteHotelIndex() throws IOException {//1、创建Request对象DeleteIndexRequest request = new DeleteIndexRequest("hotel");//2、发送请求client.indices().delete(request, RequestOptions.DEFAULT);
}
package cn.itcast.hotel;import net.sf.jsqlparser.statement.create.index.CreateIndex;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;import java.io.IOException;import static cn.itcast.hotel.constants.HotelConstants.MAPPING_TEMPLATE;public class HotelIndexTest {private RestHighLevelClient client;@Testvoid testInit() {System.out.println(client);}@Testvoid createHotelIndex() throws IOException {//1、创建Request对象CreateIndexRequest request = new CreateIndexRequest("hotel");//2、准备请求的参数,DSL语句request.source(MAPPING_TEMPLATE, XContentType.JSON);//3、发送请求client.indices().create(request, RequestOptions.DEFAULT);}@Testvoid testDeleteHotelIndex() throws IOException {//1、创建Request对象DeleteIndexRequest request = new DeleteIndexRequest("hotel");//2、发送请求client.indices().delete(request, RequestOptions.DEFAULT);}@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

 点击该测试,控制台运行成功。 

判断索引库是否存在

@Test
void testExistsHotelIndex() throws IOException {//1、创建Request对象GetIndexRequest request = new GetIndexRequest("hotel");//2、发送请求boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);//3、输出System.err.println(exists ? "索引库存在" : "索引库不存在");
}
package cn.itcast.hotel;import net.sf.jsqlparser.statement.create.index.CreateIndex;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;import java.io.IOException;import static cn.itcast.hotel.constants.HotelConstants.MAPPING_TEMPLATE;public class HotelIndexTest {private RestHighLevelClient client;@Testvoid testInit() {System.out.println(client);}@Testvoid createHotelIndex() throws IOException {//1、创建Request对象CreateIndexRequest request = new CreateIndexRequest("hotel");//2、准备请求的参数,DSL语句request.source(MAPPING_TEMPLATE, XContentType.JSON);//3、发送请求client.indices().create(request, RequestOptions.DEFAULT);}@Testvoid testDeleteHotelIndex() throws IOException {//1、创建Request对象DeleteIndexRequest request = new DeleteIndexRequest("hotel");//2、发送请求client.indices().delete(request, RequestOptions.DEFAULT);}@Testvoid testExistsHotelIndex() throws IOException {//1、创建Request对象GetIndexRequest request = new GetIndexRequest("hotel");//2、发送请求boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);//3、输出System.err.println(exists ? "索引库存在" : "索引库不存在");}@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

运行该测试,控制台运行成功,并且打印了“索引库不存在”,因为刚刚删除了索引库

文档操作

初始化JavaRestClient

xxx写虚拟机ip

    @BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
@SpringBootTest
public class HotelDocumentTest {@Autowiredprivate IHotelService hotelService;private RestHighLevelClient client;@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

添加文档

@Test
void testAddDocument() throws IOException {//根据id查询酒店数据Hotel hotel = hotelService.getById(61083L);//转换成文档类型HotelDoc hotelDoc = new HotelDoc(hotel);//1、准备Request对象IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());//2、准备json文档request.source("{\"name"\:\"Jack\",\"age\":21}",XContentType.JSON);//3、发送请求client.index(request,RequestOptions.DEFAULT);
} 

我这里的第二步用的是实体类转JSON的方式 

package cn.itcast.hotel;import cn.itcast.hotel.pojo.Hotel;
import cn.itcast.hotel.pojo.HotelDoc;
import cn.itcast.hotel.service.IHotelService;
import com.alibaba.fastjson.JSON;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException;
import java.util.List;import static cn.itcast.hotel.constants.HotelConstants.MAPPING_TEMPLATE;@SpringBootTest
public class HotelDocumentTest {@Autowiredprivate IHotelService hotelService;private RestHighLevelClient client;@Testvoid testAddDocument() throws IOException {//根据id查询酒店数据Hotel hotel = hotelService.getById(61083L);//转换成文档类型HotelDoc hotelDoc = new HotelDoc(hotel);//1、准备Request对象IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());//2、准备json文档request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);//3、发送请求client.index(request,RequestOptions.DEFAULT);}@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

实体类

package cn.itcast.hotel.pojo;import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
public class HotelDoc {private Long id;private String name;private String address;private Integer price;private Integer score;private String brand;private String city;private String starName;private String business;private String location;private String pic;public HotelDoc(Hotel hotel) {this.id = hotel.getId();this.name = hotel.getName();this.address = hotel.getAddress();this.price = hotel.getPrice();this.score = hotel.getScore();this.brand = hotel.getBrand();this.city = hotel.getCity();this.starName = hotel.getStarName();this.business = hotel.getBusiness();this.location = hotel.getLatitude() + ", " + hotel.getLongitude();this.pic = hotel.getPic();}
}

运行该测试,控制台运行成功

查询文档

@Test
void testGetDocumentById() throws IOException {//1、准备RequestGetRequest request = new GetRequest("hotel", "61083");//2、发送请求,得到响应GetResponse response = client.get(request, RequestOptions.DEFAULT);//3、解析响应结果String json = response.getSourceAsString();//反序列化HotelDoc hotelDoc = JSON.parseObject(json,HotelDoc.class);System.out.println(hotelDoc);
}
package cn.itcast.hotel;import cn.itcast.hotel.pojo.Hotel;
import cn.itcast.hotel.pojo.HotelDoc;
import cn.itcast.hotel.service.IHotelService;
import com.alibaba.fastjson.JSON;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException;
import java.util.List;import static cn.itcast.hotel.constants.HotelConstants.MAPPING_TEMPLATE;@SpringBootTest
public class HotelDocumentTest {@Autowiredprivate IHotelService hotelService;private RestHighLevelClient client;@Testvoid testAddDocument() throws IOException {//根据id查询酒店数据Hotel hotel = hotelService.getById(61083L);//转换成文档类型HotelDoc hotelDoc = new HotelDoc(hotel);//1、准备Request对象IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());//2、准备json文档request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);//3、发送请求client.index(request,RequestOptions.DEFAULT);}@Testvoid testGetDocumentById() throws IOException {//1、准备RequestGetRequest request = new GetRequest("hotel", "61083");//2、发送请求,得到响应GetResponse response = client.get(request, RequestOptions.DEFAULT);//3、解析响应结果String json = response.getSourceAsString();//反序列化HotelDoc hotelDoc = JSON.parseObject(json,HotelDoc.class);System.out.println(hotelDoc);}@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

运行该测试,控制台运行成功,并且把数据打印了出来

修改文档

这里我只演示局部更新 

@Test
void testUpdateDocument() throws IOException {//1、准备RequestUpdateRequest request = new UpdateRequest("hotel", "61083");//2、准备请求参数request.doc("price", "952","starName", "四钻");//3、发送请求client.update(request,RequestOptions.DEFAULT);
}
package cn.itcast.hotel;import cn.itcast.hotel.pojo.Hotel;
import cn.itcast.hotel.pojo.HotelDoc;
import cn.itcast.hotel.service.IHotelService;
import com.alibaba.fastjson.JSON;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException;
import java.util.List;import static cn.itcast.hotel.constants.HotelConstants.MAPPING_TEMPLATE;@SpringBootTest
public class HotelDocumentTest {@Autowiredprivate IHotelService hotelService;private RestHighLevelClient client;@Testvoid testAddDocument() throws IOException {//根据id查询酒店数据Hotel hotel = hotelService.getById(61083L);//转换成文档类型HotelDoc hotelDoc = new HotelDoc(hotel);//1、准备Request对象IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());//2、准备json文档request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);//3、发送请求client.index(request,RequestOptions.DEFAULT);}@Testvoid testGetDocumentById() throws IOException {//1、准备RequestGetRequest request = new GetRequest("hotel", "61083");//2、发送请求,得到响应GetResponse response = client.get(request, RequestOptions.DEFAULT);//3、解析响应结果String json = response.getSourceAsString();//反序列化HotelDoc hotelDoc = JSON.parseObject(json,HotelDoc.class);System.out.println(hotelDoc);}@Testvoid testUpdateDocument() throws IOException {//1、准备RequestUpdateRequest request = new UpdateRequest("hotel", "61083");//2、准备请求参数request.doc("price", "952","starName", "四钻");//3、发送请求client.update(request,RequestOptions.DEFAULT);}@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

运行该测试,控制台运行成功

删除文档

@Test
void testDeleteDocument() throws IOException {//1、准备RequestDeleteRequest request = new DeleteRequest("hotel", "61083");//2、发送请求client.delete(request,RequestOptions.DEFAULT);
}
package cn.itcast.hotel;import cn.itcast.hotel.pojo.Hotel;
import cn.itcast.hotel.pojo.HotelDoc;
import cn.itcast.hotel.service.IHotelService;
import com.alibaba.fastjson.JSON;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException;
import java.util.List;import static cn.itcast.hotel.constants.HotelConstants.MAPPING_TEMPLATE;@SpringBootTest
public class HotelDocumentTest {@Autowiredprivate IHotelService hotelService;private RestHighLevelClient client;@Testvoid testAddDocument() throws IOException {//根据id查询酒店数据Hotel hotel = hotelService.getById(61083L);//转换成文档类型HotelDoc hotelDoc = new HotelDoc(hotel);//1、准备Request对象IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());//2、准备json文档request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);//3、发送请求client.index(request,RequestOptions.DEFAULT);}@Testvoid testGetDocumentById() throws IOException {//1、准备RequestGetRequest request = new GetRequest("hotel", "61083");//2、发送请求,得到响应GetResponse response = client.get(request, RequestOptions.DEFAULT);//3、解析响应结果String json = response.getSourceAsString();//反序列化HotelDoc hotelDoc = JSON.parseObject(json,HotelDoc.class);System.out.println(hotelDoc);}@Testvoid testUpdateDocument() throws IOException {//1、准备RequestUpdateRequest request = new UpdateRequest("hotel", "61083");//2、准备请求参数request.doc("price", "952","starName", "四钻");//3、发送请求client.update(request,RequestOptions.DEFAULT);}@Testvoid testDeleteDocument() throws IOException {//1、准备RequestDeleteRequest request = new DeleteRequest("hotel", "61083");//2、发送请求client.delete(request,RequestOptions.DEFAULT);}@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

运行该测试,控制台运行成功

批量导入文档

@Test
void testBulkRequest() throws IOException {//1、创建RequestBulkRequest request = new BulkRequest();//2、准备参数,添加多个新增的Request,这里添加两个数据,分别是id为101和102的数据request.add(new IndexRequest("hotel").id("101").source("json source", XContentType.JSON));request.add(new IndexRequest("hotel").id("102").source("json source", XContentType.JSON));//3、发送请求client.bulk(request,RequestOptions.DEFAULT);
}

我这里改成这样,是因为我要把该表的所有数据都导入文档

 @Test
    void testBulkRequest() throws IOException {
        //批量查询酒店数据
        List<Hotel> hotels = hotelService.list();
        //1、创建Request
        BulkRequest request = new BulkRequest();
        //2、准备参数,添加多个新增的Request
        for(Hotel hotel:hotels){
            //转换为文档类型HotelDoc
            HotelDoc hotelDoc = new HotelDoc(hotel);
            //创建新增文档的Request对象
            request.add(new IndexRequest("hotel")
            .id(hotelDoc.getId().toString())
            .source(JSON.toJSONString(hotelDoc),XContentType.JSON));
        }
        //3、发送请求
        client.bulk(request,RequestOptions.DEFAULT);
    }

package cn.itcast.hotel;import cn.itcast.hotel.pojo.Hotel;
import cn.itcast.hotel.pojo.HotelDoc;
import cn.itcast.hotel.service.IHotelService;
import com.alibaba.fastjson.JSON;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException;
import java.util.List;import static cn.itcast.hotel.constants.HotelConstants.MAPPING_TEMPLATE;@SpringBootTest
public class HotelDocumentTest {@Autowiredprivate IHotelService hotelService;private RestHighLevelClient client;@Testvoid testAddDocument() throws IOException {//根据id查询酒店数据Hotel hotel = hotelService.getById(61083L);//转换成文档类型HotelDoc hotelDoc = new HotelDoc(hotel);//1、准备Request对象IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());//2、准备json文档request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);//3、发送请求client.index(request,RequestOptions.DEFAULT);}@Testvoid testGetDocumentById() throws IOException {//1、准备RequestGetRequest request = new GetRequest("hotel", "61083");//2、发送请求,得到响应GetResponse response = client.get(request, RequestOptions.DEFAULT);//3、解析响应结果String json = response.getSourceAsString();//反序列化HotelDoc hotelDoc = JSON.parseObject(json,HotelDoc.class);System.out.println(hotelDoc);}@Testvoid testUpdateDocument() throws IOException {//1、准备RequestUpdateRequest request = new UpdateRequest("hotel", "61083");//2、准备请求参数request.doc("price", "952","starName", "四钻");//3、发送请求client.update(request,RequestOptions.DEFAULT);}@Testvoid testDeleteDocument() throws IOException {//1、准备RequestDeleteRequest request = new DeleteRequest("hotel", "61083");//2、发送请求client.delete(request,RequestOptions.DEFAULT);}@Testvoid testBulkRequest() throws IOException {//批量查询酒店数据List<Hotel> hotels = hotelService.list();//1、创建RequestBulkRequest request = new BulkRequest();//2、准备参数,添加多个新增的Requestfor(Hotel hotel:hotels){//转换为文档类型HotelDocHotelDoc hotelDoc = new HotelDoc(hotel);//创建新增文档的Request对象request.add(new IndexRequest("hotel").id(hotelDoc.getId().toString()).source(JSON.toJSONString(hotelDoc),XContentType.JSON));}//3、发送请求client.bulk(request,RequestOptions.DEFAULT);}@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

运行该测试,控制台运行成功,并且可以看到导入了201条数据,正好表的数据量

代码文件点击下载icon-default.png?t=N7T8https://pan.baidu.com/s/1NJnwlfThymqPRhqWqqP0FQ?pwd=6c0n 上一篇:SpringAMQP的配置和使用

http://www.fp688.cn/news/161459.html

相关文章:

  • 电子商务网站策划书3500字搜索百度网址网页
  • 济南做网站公司电话seo云优化方法
  • 网站首页布局设计模板百度指数查询app
  • 马良行网站3d模型预览怎么做的百度优化推广
  • 网站排名分析 用户需求万能软文范例800字
  • 广告平面设计公司百度关键词优化查询
  • 如何做社交网站热搜榜上能否吃自热火锅
  • 潍坊高端网站建设头条今日头条新闻
  • 烟台建设联合会网站湖南网络营销外包
  • 酒店网站可以怎么做可口可乐网络营销策划方案
  • wordpress 分享按钮插件搜索引擎优化的内容有哪些
  • 公司域名怎么取比较好信阳seo
  • java ssm 新闻网站开发源码中国军事新闻最新消息
  • 求个网站你明白的友情链接检测结果
  • 专门做产品定制的网站今日十大热点新闻
  • 全屏滚动的企业网站网络营销有本科吗
  • 做网站建设的公司有哪些内容百度站长平台注册
  • 广州网站设计首选刻注册一个域名需要多少钱
  • 广告设计公司实习日记上海网站关键词排名优化报价
  • 免费的个人网站注册常州百度推广代理公司
  • 最好的手机网站建设seo公司广州
  • asp网站采集关键词代做排名推广
  • 刷东西的网站自己做徐州百度推广公司
  • 网站开发营业执照app推广工作靠谱吗
  • php做的网站论文黑帽seo技术
  • 网站建设各语言优点推广引流app
  • 实训网站开发目的推广赚钱app排行榜
  • 燕莎做网站百度关键词竞价
  • 成都多语种网站建设关键词搜索工具
  • 网站开发的毕业设计网站推广优化的公司