Elasticsearch实战
上一课时已经介绍了Elasticsearch、Kibana安装
Elasticsearch 集群健康检查、CURD以及多种搜索方式
集群健康检查
es提供了一套api叫cat api可以查看es中的各种数据;
?v 参数是为了显示列头;
集群健康状态就是看status
green 每个索引的primary shard和replica shard都是active状态
yellow 每个索引的primary shard都是active状态,部分replica shard不是active状态
red 不是每个索引的primary shard都是active状态,部分索引有数据丢失
GET _cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1606872265 01:24:25 my-application green 1 1 6 6 0 0 0 0 - 100.0%
创建删除索引
查看索引
GET _cat/indices?v
新增索引
创建索引test_idex
PUT /test_idex?pretty
删除索引
删除索引test_idex
DELETE /test_idex?pretty
CURD
新增
PUT /index/type/id
我们分别建立两个文档,benzz和bmw
查询
GET /vehicle/car/1
更新
方式一:替换文档(需要带上所有的信息),语法和新增一样
PUT /vehicle/car/1
{
"name" : "benzz",
"price" : 330000
}
方式二:局部更新文档
POST /vehicle/car/1/_update
{
"doc":{
"price":340000
}
}
删除
DELETE /vehicle/car/2
多种搜索方式
一、query string search(复杂请求无法构建,生产很少使用)
搜索全部商品
GET /vehicle/car/_search
took 耗费时间(毫秒)
timed_out 是否超时
_shards 数据拆成了多少个分片,对于搜索请求会打到所有的primary shard(或是它的某个replica shard)
hits.total 查询结果的数量
hits.max_score 对于search的相关匹配分数,匹配度越高,分数越高
hits.hits 命中的文档
搜索benzz并按价格倒序
GET /vehicle/car/_search?q=name:benzz&sort=price:desc
二、query DSL
DSL(Domain Specified Language)领域专用语言。
# 查询所有
GET /vehicle/car/_search
{
"query": {
"match_all": {}
}
}
# 查询benzz,价格倒序
GET /vehicle/car/_search
{
"query": {
"match": {
"name": "benzz"
}
},
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
# 分页查询
GET /vehicle/car/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 1
}
# 指定查询name字段
GET /vehicle/car/_search
{
"query": {
"match_all": {}
},
"_source": ["name"]
}
三、query filter
# 筛选价格在35-40万之间的benzz
GET /vehicle/car/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "benzz"
}
}
],
"filter": [
{
"range": {
"price": {
"gte": 300000,
"lte": 350000
}
}
}
]
}
}
}
四、full-text search(全文搜索)
# 新增新款benzz
PUT /vehicle/car/3
{
"name" : "benzz new",
"price" : 330000
}
# 会拆分benzz和new去匹配,得分高的排在前面
GET /vehicle/car/_search
{
"query": {
"match": {
"name": "benzz new"
}
}
}
五、phrse search(短语搜索)
和全文检索对立,要求搜索的字段要在文档中完全匹配
GET /vehicle/car/_search
{
"query": {
"match_phrase": {
"name": "benzz new"
}
}
}
六、highlight search(高亮搜索)
GET /vehicle/car/_search
{
"query": {
"match": {
"name": "bmw"
}
},
"highlight": {
"fields": {
"name":{}
}
}
}
欢迎访问我的个人博客:小马博客
欢迎关注公众号《JAVA拾贝》