ElasticSearch 实现分词全文检索 - 概述
ElasticSearch 实现分词全文检索 - ES、Kibana、IK安装
ElasticSearch 实现分词全文检索 - Restful基本操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 文档操作
ElasticSearch 实现分词全文检索 - 测试数据准备
ElasticSearch 实现分词全文检索 - term、terms查询
ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询
ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询
ElasticSearch 实现分词全文检索 - Scroll 深分页
ElasticSearch 实现分词全文检索 - delete-by-query
ElasticSearch 实现分词全文检索 - 复合查询
ElasticSearch 实现分词全文检索 - filter查询
ElasticSearch 实现分词全文检索 - 高亮查询
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
ElasticSearch 实现分词全文检索 - 经纬度查询
ElasticSearch 实现分词全文检索 - 搜素关键字自动补全(suggest)
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码
GET 请求:
http://ip:port/index: 查询索引信息
http://ip;port/index/type/doc_id: 查询指定的文档信息
POST 请求:
http://ip;port/index/type/_search: 查询文档,可以在请求体中添加json字符串来代表查询条件
http://ip;port/index/type/doc_id/_update: 修改文档,在请求体中指定ison字符串代表修改的具体信息
PUT 请求:
http://ip;port/index: 创建一个索引,需要在请求体中指定索引的信息,类型,结构
http://ip:port/index/type/_mappings: 代表创建索引时,指定索引文档存储的属性的信息
DELETE 请求:
http://ip;port/index: 删除跑路
http://ip;port/index/type/doc_id: 删除指定的文档
Kibana 操作
创建 person 索引
# 创建一个索引
PUT /person
{
"settings": {
"number_of_shards": 5, #分片数
"number_of_replicas": 1 #备份数
}
}
返回值
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "person"
}
Kibana 中查看
Stack Management -> 索引管理
单机版,分片无法存放,所以 yellow 黄色
# 查看索引信息
GET /person
# 删除索引
DELETE /person
Kibana 操作
String:
text: 一般用于全文检索。将当前的Field进行分词
keyword: 当前 Field 不会被分词
数值类型:
long、 integer、 short、 byte、 double、 float、
half_float:精度比float小一半
scaled_float:根据一个long和scaled来表达一个浮点型, long=345,scaled=100 => 3.45
时间类型:
date:针对时间类型指定具体格式
布尔类型:
boolean:表达true和false
二进制类型:
binary:暂时支持Base64 encode string
范围类型(Range datatypes):
long_range: 赋值时,无序指定具体的内容,只需要存储一个范围即可,指定gt,此,gte,lte
integer_range:同上
double_range:同上
float_range: 同上
date_range:同上
ip_range: 同上。
经纬度类型:
geo_point: 用来存储经纬度,结合定位的经纬度,来计算出距离
IP类型
ip: 可以存付IPV4、IPV6
其它类型参考官网:
## 创建索引并指定结构
PUT /book
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
// 文档存储的Field
"properties":{
"name":{
// 类型
"type":"text",
// 指定分词器
"analyzer":"ik_max_word",
// 指定当前Field可以被作为查询的条件
"index":true,
// 是否需要额外存储
"store":false
},
"author":{
"type":"keyword"
},
"count":{
"type":"long"
},
"on-sale":{
"type":"date",
// 时间类型时格式化方式
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
"descr":{
"type":"text",
"analyzer":"ik_max_word"
}
}
}
}
文档在ES服务中的唯一标识,_index, _type, _id 三个内容为组合,锁定一个文档进行操作
ID不方便使用
# 添加文档,自动生成 id
POST /book/_doc
{
"name":"太极",
"author":"伏羲",
"count":888,
"on-sale":"2023-02-23",
"descr":"太极生两仪,两仪生四象,四象生八卦"
}
返回
{
"_index" : "book",
"_type" : "_doc", //创建时没指定,默认的
"_id" : "YJJLfYYBGlLaT58LDoV5", // 自动生成的ID
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
POST /book/_doc/1
{
"name":"太极拳",
"author":"陈王廷",
"count":666,
"on-sale":"2023-02-23",
"descr":"掤、捋、挤、按、采、列、肘、靠"
}
返回值
{
"_index" : "book",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
覆盖式修改
PUT /book/_doc/1
{
"name":"太极拳",
"author":"陈王廷",
"count":666, //如果不赋值,原来的值将被更新成 0
"on-sale":"2023-02-28",
"descr":"掤、捋、挤、按、采、列、肘、靠"
}
doc 修改方式
Deprecation: [types removal] Specifying types in document update requests is deprecated, use the endpoint /{index}/_update/{id} instead.
POST /book/_doc/1/_update
{
"doc":{
// 指定Field单独修改
"count":6666
}
}
返回值
#! Deprecation: [types removal] Specifying types in document update requests is deprecated, use the endpoint /{index}/_update/{id} instead.
{
"_index" : "book",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
DELETE /book/_doc/YJJLfYYBGlLaT58LDoV5
ES 是一个使用Java语言并且基于Lucene编写的搜索引擎框架,他提供了分布式的全文搜索功能,提供了一个统一的基于Restful风格的WEB接口,官方客户端也对多种语言都提供了相应的API。