怎么做网站教程 建站视频,wordpress 用户名,网站推广实施计划,曼网企业名录搜索软件文章目录 前言3 文档操作3.1 新增文档3.2 查询文档3.3 修改文档3.3.1 全量修改3.3.2 增量修改 3.4 删除文档 4 RestAPI4.1 创建数据库和表4.2 创建项目4.3 mapping映射分析4.4 初始化客户端4.5 创建索引库4.6 判断索引库是否存在4.7 删除索引库 5 RestClient操作文档5.1 准备工… 文章目录 前言3 文档操作3.1 新增文档3.2 查询文档3.3 修改文档3.3.1 全量修改3.3.2 增量修改 3.4 删除文档 4 RestAPI4.1 创建数据库和表4.2 创建项目4.3 mapping映射分析4.4 初始化客户端4.5 创建索引库4.6 判断索引库是否存在4.7 删除索引库 5 RestClient操作文档5.1 准备工作5.2 新增文档5.3 查询文档 前言
ElasticSearch学习笔记(一)倒排索引、ES和Kibana安装、索引操作
3 文档操作
3.1 新增文档
语法
POST /{索引库名}/_doc/{文档id}
{字段1: 值1,字段2: 值2,字段3: {子属性1:值3,子属性2:值4}// ...
}3.2 查询文档
语法
GET /{索引库名}/_doc/{文档id}3.3 修改文档
3.3.1 全量修改
全量修改是覆盖原来的文档其本质是先根据指定的id删除文档id对应的文档不存在也可以再新增一个相同id的文档。
语法
PUT /{索引库名}/_doc/{文档id}
{字段1: 值1,字段2: 值2,字段3: {子属性1:值3,子属性2:值4}// ...
}3.3.2 增量修改
增量修改是只修改指定id匹配的文档中的部分字段。
语法
POST /{索引库名}/_update/{文档id}
{doc: {修养修改的字段: 新值}
}3.4 删除文档
语法
DELETE /{索引库名}/_doc/{文档id}4 RestAPI
ES官方提供了各种不同语言的客户端用来操作ES这些客户端的本质是组装DSL语句通过Http请求发送给ES。其官方文档地址https://www.elastic.co/guide/en/elasticsearch/client/index.html
其中Java语言的客户端分为两种 本文章学习的是high-level REST client。
4.1 创建数据库和表
CREATE DATABASE hsgx;
USE hsgx;
CREATE TABLE tb_hotel (id BIGINT(20) NOT NULL PRIMARY KEY COMMENT 酒店id,name VARCHAR(255) NOT NULL COMMENT 酒店名称,address VARCHAR(255) NOT NULL COMMENT 酒店地址,price INT(10) NOT NULL COMMENT 酒店价格,score INT(2) NOT NULL COMMENT 酒店评分,brand VARCHAR(32) NOT NULL COMMENT 酒店品牌,city VARCHAR(32) NOT NULL COMMENT 所在城市,star_name VARCHAR(16) NOT NULL COMMENT 酒店星级,business VARCHAR(255) NOT NULL COMMENT 商圈,latitude VARCHAR(32) NOT NULL COMMENT 纬度,longitude VARCHAR(32) NOT NULL COMMENT 经度,pic VARCHAR(255) DEFAULT NULL COMMENT 酒店图片
);INSERT INTO tb_hotel(id, name, address, price, score, brand, city, star_name, business, latitude, longitude, pic)
VALUES (1, 白天鹅, 中山路, 888, 5, 白天鹅, 广州, 五星, 太古汇, 123.456, 456.748, a.png),
(2, 希尔顿, 南京路, 456, 4.5, 希尔顿, 上海, 四星, 外滩, 123.456, 456.748, b.png);4.2 创建项目
在IDEA中创建一个maven项目结构如下 4.3 mapping映射分析
mapping映射分析要考虑的信息包括
字段名参考表结构。字段数据类型参考表结构。是否参与搜索根据具体业务进行判断。是否需要分词根据具体内容进行判断如果内容是一个整体就无需分词反之则要分词。分词器是什么可以统一使用ik_max_word。
对应到tb_hotel表我们可以新建如下索引
PUT /hotel
{mappings: {properties: {id: {type: integer},name:{type: text,analyzer: ik_max_word,copy_to: all},address:{type: text,analyzer: ik_max_word,index: false},price:{type: integer},score:{type: integer},brand:{type: keyword,copy_to: all},city:{type: keyword,copy_to: all},starName:{type: keyword},business:{type: keyword},pic:{type: keyword,index: false},location:{type: geo_point},all:{type: text,analyzer: ik_max_word}}}
}其中有两个比较特殊的字段
location地理坐标类型是geo_point表示由经度latitude和纬度longitude确定一个点。all一个组合字段其目的是将多字段的值 利用copy_to属性合并提供给用户搜索。在上面的例子中name、brand、city字段会合并到一起。
4.4 初始化客户端
Java客户端中与ES一切交互都封装在一个名为RestHighLevelClient的类中必须先完成这个对象的初始化建立与ES的连接。主要步骤如下
1引入依赖注意版本号和安装的ES版本一致
dependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactIdversion7.12.1/version
/dependency
dependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-client/artifactIdversion7.12.1/version
/dependency
dependencygroupIdorg.elasticsearch/groupIdartifactIdelasticsearch/artifactIdversion7.12.1/version
/dependency2初始化RestHighLevelClient
private RestHighLevelClient client;Before
void setUp() {this.client new RestHighLevelClient(RestClient.builder(HttpHost.create(http://192.168.153.128:9200)));
}After
void close() throws IOException {this.client.close();
}4.5 创建索引库
private static final String DSL {\n \mappings\: {\n \properties\: {\n \id\: {\n \type\: \integer\\n },\n \name\:{\n \type\: \text\,\n \analyzer\: \ik_max_word\,\n \copy_to\: \all\\n },\n \address\:{\n \type\: \text\,\n \analyzer\: \ik_max_word\,\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 \copy_to\: \all\\n },\n \starName\:{\n \type\: \keyword\\n },\n \business\:{\n \type\: \keyword\\n },\n \pic\:{\n \type\: \keyword\,\n \index\: false\n },\n \location\:{\n \type\: \geo_point\\n },\n \all\:{\n \type\: \text\,\n \analyzer\: \ik_max_word\\n }\n }\n }\n };Test
public void testCreateHotelIndex() throws IOException {// 1.参数为索引库名称CreateIndexRequest createIndexRequest new CreateIndexRequest(hotel);// 2.设置mapping映射createIndexRequest.source(DSL, XContentType.JSON);// 3.发起创建索引库请求client.indices().create(createIndexRequest, RequestOptions.DEFAULT);
}由以上代码可知创建索引库的步骤主要又三步
1创建Request对象。创建索引库的操作对应的Request对象是CreateIndexRequest。2设置mapping映射其实就是DSL的JSON参数部分。因为JSON字符串很长所以定义了一个静态字符串常量来表示让代码看起来更加优雅。3发送创建索引库请求client.indices()方法的返回值是IndicesClient类型封装了所有与索引库操作有关的方法。 执行以上单元测试在DevTools工具中查询该索引库 4.6 判断索引库是否存在
判断索引库是否存在本质是使用GET命令查询索引库因此它对应的Request对象是GetIndexRequest。
Test
public void testExistsHotelIndex() throws IOException {// 1.参数为索引库名称GetIndexRequest request new GetIndexRequest(hotel);// 2.发送请求boolean exists client.indices().exists(request, RequestOptions.DEFAULT);// 3.输出System.err.println(exists ? 索引库已经存在 : 索引库不存在);
}执行以上单元测试结果如下 4.7 删除索引库
删除索引库对应的Request对象是DeleteIndexRequest。
Test
public void testDeleteHotelIndex() throws IOException {// 1.参数为索引库名称DeleteIndexRequest request new DeleteIndexRequest(hotel);// 2.发送请求client.indices().delete(request, RequestOptions.DEFAULT);
}执行以上单元测试在DevTools工具中查询该索引库 5 RestClient操作文档
5.1 准备工作
由于上文定义的索引库hotel的mapping映射与数据库表结构有一些差异因此还需要定义一个新的实体类与索引库的mapping映射对应起来
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();}
}主要的区别在于将latitude、longitude两个字段合并为location一个字段。
5.2 新增文档
新增文档的DSL语句示例如下
POST /hotel/_doc/1
{name: 白天鹅,score: 5
}对应的Java代码如下
Test
public void testCreateDocIndex() throws IOException {// 1.POST /hotel/_doc/1 { name: 白天鹅, score: 5 }IndexRequest request new IndexRequest(hotel).id(1);request.source({\name\: \白天鹅\, \score\: 5}, XContentType.JSON)// 2.发送请求client.index(request, RequestOptions.DEFAULT);
}执行以上单元测试在DevTools工具中查询该文档 下面实现把数据库tb_hotel表的数据读取出来并保存到ES中
Test
public void testSaveHotel() throws IOException {// 1.根据id查询酒店数据Hotel hotel hotelService.getById(2);// 2.转换为文档类型HotelDoc hotelDoc new HotelDoc(hotel);// 3.将HotelDoc转jsonString json JSON.toJSONString(hotelDoc);// 4.准备Request对象IndexRequest request new IndexRequest(hotel).id(hotelDoc.getId().toString());// 5.准备Json文档request.source(json, XContentType.JSON);// 6.发送请求client.index(request, RequestOptions.DEFAULT);
}执行以上单元测试在DevTools工具中查询该文档 5.3 查询文档
新增文档的DSL语句示例如下
GET /hotel/_doc/2对应的Java代码如下
Test
public void testQueryHotelDoc() throws IOException {// 1.创建Request对象GetRequest request new GetRequest(hotel, 2);// 2.发送请求GetResponse response client.get(request, RequestOptions.DEFAULT);// 3.解析结果String json response.getSourceAsString();HotelDoc hotelDoc JSON.parseObject(json, HotelDoc.class);System.out.println(hotelDoc);
}执行以上单元测试结果如下 …
本节完更多内容请查阅分类专栏微服务学习笔记
感兴趣的读者还可以查阅我的另外几个专栏
SpringBoot源码解读与原理分析MyBatis3源码深度解析Redis从入门到精通MyBatisPlus详解SpringCloud学习笔记 文章转载自: http://www.morning.xrksf.cn.gov.cn.xrksf.cn http://www.morning.rfbpq.cn.gov.cn.rfbpq.cn http://www.morning.blznh.cn.gov.cn.blznh.cn http://www.morning.snnwx.cn.gov.cn.snnwx.cn http://www.morning.yzxhk.cn.gov.cn.yzxhk.cn http://www.morning.pangucheng.cn.gov.cn.pangucheng.cn http://www.morning.bwttj.cn.gov.cn.bwttj.cn http://www.morning.gtnyq.cn.gov.cn.gtnyq.cn http://www.morning.xwlmr.cn.gov.cn.xwlmr.cn http://www.morning.jjzjn.cn.gov.cn.jjzjn.cn http://www.morning.ohmyjiu.com.gov.cn.ohmyjiu.com http://www.morning.kjrlp.cn.gov.cn.kjrlp.cn http://www.morning.mjglk.cn.gov.cn.mjglk.cn http://www.morning.mgfnt.cn.gov.cn.mgfnt.cn http://www.morning.gydth.cn.gov.cn.gydth.cn http://www.morning.rxhsm.cn.gov.cn.rxhsm.cn http://www.morning.jrsgs.cn.gov.cn.jrsgs.cn http://www.morning.rttkl.cn.gov.cn.rttkl.cn http://www.morning.nzzws.cn.gov.cn.nzzws.cn http://www.morning.kclkb.cn.gov.cn.kclkb.cn http://www.morning.hjwkq.cn.gov.cn.hjwkq.cn http://www.morning.amlutsp.cn.gov.cn.amlutsp.cn http://www.morning.grxyx.cn.gov.cn.grxyx.cn http://www.morning.fbqr.cn.gov.cn.fbqr.cn http://www.morning.dwmtk.cn.gov.cn.dwmtk.cn http://www.morning.bpp999.com.gov.cn.bpp999.com http://www.morning.chjnb.cn.gov.cn.chjnb.cn http://www.morning.4r5w91.cn.gov.cn.4r5w91.cn http://www.morning.rzysq.cn.gov.cn.rzysq.cn http://www.morning.wnbpm.cn.gov.cn.wnbpm.cn http://www.morning.rjmd.cn.gov.cn.rjmd.cn http://www.morning.nwbnt.cn.gov.cn.nwbnt.cn http://www.morning.dpzcc.cn.gov.cn.dpzcc.cn http://www.morning.qnxtz.cn.gov.cn.qnxtz.cn http://www.morning.dmcqy.cn.gov.cn.dmcqy.cn http://www.morning.qmmfr.cn.gov.cn.qmmfr.cn http://www.morning.jjwzk.cn.gov.cn.jjwzk.cn http://www.morning.prysb.cn.gov.cn.prysb.cn http://www.morning.bkcnq.cn.gov.cn.bkcnq.cn http://www.morning.pxwjp.cn.gov.cn.pxwjp.cn http://www.morning.drhnj.cn.gov.cn.drhnj.cn http://www.morning.hrzky.cn.gov.cn.hrzky.cn http://www.morning.jtfcd.cn.gov.cn.jtfcd.cn http://www.morning.ylpl.cn.gov.cn.ylpl.cn http://www.morning.gcftl.cn.gov.cn.gcftl.cn http://www.morning.rcmwl.cn.gov.cn.rcmwl.cn http://www.morning.qpmmg.cn.gov.cn.qpmmg.cn http://www.morning.nwzcf.cn.gov.cn.nwzcf.cn http://www.morning.yqgny.cn.gov.cn.yqgny.cn http://www.morning.bxqpl.cn.gov.cn.bxqpl.cn http://www.morning.kuaijili.cn.gov.cn.kuaijili.cn http://www.morning.dnpft.cn.gov.cn.dnpft.cn http://www.morning.mfmx.cn.gov.cn.mfmx.cn http://www.morning.sqyjh.cn.gov.cn.sqyjh.cn http://www.morning.jxzfg.cn.gov.cn.jxzfg.cn http://www.morning.fksrg.cn.gov.cn.fksrg.cn http://www.morning.lqqqh.cn.gov.cn.lqqqh.cn http://www.morning.mlnby.cn.gov.cn.mlnby.cn http://www.morning.gmgnp.cn.gov.cn.gmgnp.cn http://www.morning.mmtjk.cn.gov.cn.mmtjk.cn http://www.morning.sqhlx.cn.gov.cn.sqhlx.cn http://www.morning.pbmkh.cn.gov.cn.pbmkh.cn http://www.morning.yzdth.cn.gov.cn.yzdth.cn http://www.morning.ckrnq.cn.gov.cn.ckrnq.cn http://www.morning.pwbps.cn.gov.cn.pwbps.cn http://www.morning.gfmpk.cn.gov.cn.gfmpk.cn http://www.morning.rzmsl.cn.gov.cn.rzmsl.cn http://www.morning.mprpx.cn.gov.cn.mprpx.cn http://www.morning.lsgjf.cn.gov.cn.lsgjf.cn http://www.morning.rlwcs.cn.gov.cn.rlwcs.cn http://www.morning.ynstj.cn.gov.cn.ynstj.cn http://www.morning.tktyh.cn.gov.cn.tktyh.cn http://www.morning.rnmc.cn.gov.cn.rnmc.cn http://www.morning.bxrqf.cn.gov.cn.bxrqf.cn http://www.morning.qkqpy.cn.gov.cn.qkqpy.cn http://www.morning.wjxyg.cn.gov.cn.wjxyg.cn http://www.morning.rfjmy.cn.gov.cn.rfjmy.cn http://www.morning.srxhd.cn.gov.cn.srxhd.cn http://www.morning.xxsrm.cn.gov.cn.xxsrm.cn http://www.morning.nhdmh.cn.gov.cn.nhdmh.cn