网站首页 > 开源技术 正文
文档和字段
ElasticSearch面向文档存储。文档内容会序列化为JSON格式用于存储。
JSON格式中有许多字段(field)相当于数据库中的列。
索引和映射
索引(index): 同一类型文档的集合。
对应于关系型数据库,就类似于关系型数据库中的表。
映射(mapping): 文档字段的约束信息。
对于关系型数据库,就类似于表结构约束。
MySql 与 ElasticSearch 结构对比
MySQL | ElasticSearch |
table | index |
Schema | mapping |
row | document |
column | field |
分词器
- 作用
创建倒排索引时对文档内容进行分词。
用户搜索时,对搜索内容进行分词。
- IK分词器:
ik_smart: 分词力度粗
ik_max_word:分词力度细
- IK分词器拓展词条 和 停用词条
es中config目录中IKAnalyzer.cfg.xml文件中添加扩展词典 和 停用词典。
词典中添加对应词条。
ES创建索引库
索引库类似于表,mapping映射类似于表结构。
- mapping 映射属性
- type:字段数据类型,常见的简单类型有:
字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
数值:long、integer、short、byte、double、float、
布尔:boolean
日期:date
对象:object
地理坐标: geo_point(纬度 经度)、geo_shape
2.index:是否创建索引,默认true
3.analyzer:使用分词器类型
4.properties: 该字段子字段
5.copy_to: 组合字段,合并多个字段值,用于搜索等。。。
ES操作索引库
创建索引库和映射
PUT /索引库名称
{
"mappings": {
"properties": {
"字段1":{
"type": "text",
"analyzer": "ik_smart"
},
"字段2":{
"type": "keyword",
"index": "false"
},
"字段3":{
"properties": {
"子字段":{
"type" : "keyword"
}
},
//...........
},
}
}
}
查询索引库
GET /索引库名
修改索引库
注意:索引库创建完成后,就不能修改已有字段mapping。
但是,新添加的字段到mapping,是可以的。
PUT /索引库名称/_mapping
{
"properties": {
"新字段名": {
"type": "数据类型"
}
}
}
删除索引库
DELETE /索引库名
小结:
创建索引库: PUT /索引库名称
查询索引库: GET /索引库名称
修改索引库: PUT /索引库名称/_mapping
删除索引库: DELETE /索引库名称
文档操作
新增文档
POST /索引库名称/_doc/文档ID
{
"字段1": "值1",
"字段2: "值2",
"字段3: {
"子字段1:"值3",
"子字段2":"值4"
},
..............
}
查询文档
GET /索引库名称/_doc/{id}
删除文档
DELETE /索引库名称/_doc/id值
修改文档
全量修改:直接覆盖源文档
增量修改: 修改部分字段
全量修改
PUT /索引库名称/_doc/文档ID
{
"字段1":"值1",
"字段1":"值1",
.....
}
增量修改
POST /索引库名称/_update/文档ID
{
"doc": {
"字段名":"新值",
....
}
}
小结:
创建文档: PSOT /索引库名称/_doc/文档ID
查询文档: GET /索引库名称/_doc/文档ID
删除文档: DELETE /索引库名称/_doc/文档ID
修改文档:
全量修改: PUT /索引库名称/_doc/文档ID
增量修改: POST /索引库名称/_update/文档ID {"doc" : {}}
RestClient操作ES
准备工作:
引入依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
如果springBoot中ES版本与使用的版本不一致,可以覆盖ES版本。
初始化客户端:
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
HttpHost.create("IP:9200")
));
..........
client.close();
创建索引库
//创建Request对象
CreateIndexRequest request = new CreateIndexRequest("索引库名称");
//准备DSL语句
request.source( DSL语句 , XContentType.JSON);
//发送请求
client.indices().create(request,RequestOptions.DEFAULT);
删除索引库
// 1.创建Request对象
DeleteIndexRequest request = new DeleteIndexRequest("索引库名称");
// 2.发送请求
client.indices().delete(request, RequestOptions.DEFAULT);
判断索引库是否存在
// 1.创建Request对象
GetIndexRequest request = new GetIndexRequest("索引库名称");
// 2.发送请求
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
小结:
核心是client.indices()方法来获取索引库的操作对象。
RestClient操作文档
新增文档
// 1.准备Request对象
IndexRequest request = new IndexRequest("索引库名称").id("文档ID");
// 2.准备Json文档
request.source( json格式的数据字符串 , XContentType.JSON);
// 3.发送请求
client.index(request, RequestOptions.DEFAULT);
查询文档
// 1.准备Request
GetRequest request = new GetRequest("索引库名称", "文档ID");
// 2.发送请求,得到响应
GetResponse response = client.get(request, RequestOptions.DEFAULT);
// 3.解析响应结果
String json = response.getSourceAsString();
删除文档
// 1.准备Request
DeleteRequest request = new DeleteRequest("索引库名称", "文档ID");
// 2.发送请求
client.delete(request, RequestOptions.DEFAULT);
修改文档
// 1.准备Request
UpdateRequest request = new UpdateRequest("索引库名称", "文档ID");
// 2.准备请求参数
request.doc(
"key1", "value1",
"key2", "value2"
);
// 3.发送请求
client.update(request, RequestOptions.DEFAULT);
批量导入
// 创建Request
BulkRequest request = new BulkRequest();
// 2.2.创建新增文档的Request对象
request.add(new IndexRequest("索引库名称")
.id("文档ID")
.source("JSON格式数据", XContentType.JSON));
小结:
ES使用倒排序的方式,解决了关键字快速匹配并且找到相关数据的问题。
猜你喜欢
- 2024-10-23 maven打包jar包时如何打包本地jar文件
- 2024-10-23 记录自己搭建solr配置中文分词的过程供大家参考
- 2024-10-23 springboot整合websocket、solr(springboot整合rocketMQ)
- 2024-10-23 ElasticSearch安装ik分词插件(elasticsearch 安装ik分词器)
- 2024-10-23 12K的码农怎样蜕变为30k的架构师?找准方向,拒绝迷茫
- 2024-10-23 Lucene就是这么简单(好儿子今天妈妈就是你的女人了)
- 2024-10-23 5分钟带你了解Lucene全文索引(lucene索引原理)
- 2024-10-23 在.net core中进行中文分词方法(.net core hangfire)
- 2024-10-23 Elasticsearch-通过外网访问加入kibana,head「002」
- 2024-10-23 SpringBoot+kafka+ELK分布式日志收集
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)