Elasticsearch常用命令

Elasticsearch

一、Kibana常用命令

1.使⽤Kibana创建索引库

{
 "settings": {
 "属性名": "属性值"
 }
}

settings:就是索引库设置,其中可以定义索引库的各种属性,⽬前我们可以不设置,都⾛默认。

2.查看索引库

GET /索引库名

3.删除索引库

DELETE /索引库名

4.创建字段映射

PUT /索引库名/_mapping/typeName
{
 "properties": {
 "字段名": {
 "type": "类型",
 "index": true,
 "store": false,
 "analyzer": "分词器"
 }
 }
}

属性描述

属性描述
type类型,可以是text、keyword、long、short、date、integer、object等
index是否索引,默认为true
store是否存储,默认为false
analyzer分词器,例如设置为ik_max_word值,即使⽤IK分词器

注意:在进⾏创建索引库中的字段映射时,需要先确保索引库被创建,否则会抛index_not_found_exception异常。

5.查看映射关系

GET /索引库名/_mapping (查看某个索引库中所有类型的映射)

GET /索引库名/_mapping/类型名 (要查看某个类型映射,可以在路径后⾯跟上类型名称)

6.创建索引库

PUT /名称

7.使用kibana对文档操作

7.1 新增文档随机生成id

POST /索引库名/类型名
{
 "key":"value"
}

7.2 新增⽂档并⾃定义id

POST /索引库名/类型/id值
{
 ...
}

8.修改数据

PUT表示修改⽂档。不过修改必须指定id。分为以下两种情况:

  • 如果id对应的⽂档存在,则修改。
  • 如果id对应的⽂档不存在,则新增。
PUT /yx/goods/id值

9.删除数据

DELETE /索引库名/类型名/id值

二、查询(重点掌握内容)

  • 基本查询
  • 结果过滤
  • 排序
  • 高级查询

1.基本查询

基本语法:

GET /索引库名/_search
{
 "query": {
 "查询类型": {
 "查询条件": "查询条件值"
 }
 }
}

解释:这⾥的query代表⼀个查询对象,⾥⾯可以有不同的查询属性。

  • 查询类型:例如match_all、match、term、range等

  • 查询条件:查询条件会根据类型的不同,写法也有差异,后⾯详细讲解

1.1 查询所有

演示示例:

GET /yx/_search
{
 	"query": {
 	"match_all": {}
 	}
}

语法说明:

属性描述
query代表查询对象
match_all代表上查询所有

1.2 匹配查询

OR关系

match类型查询,会把查询条件进⾏分词,然后进⾏查询,多个词条之间是OR的关系。

GET /yx/_search
{
 	"query": {
 	"match": {
 	"title": "⼩⽶电视"
 	}
 }
}

解释:此命令不仅会查询到“电视”,⽽且与“⼩⽶”相关的都会查询到,多个词之间是OR的关系

AND关系

GET /yx/_search
{
 	"query": {
 	"match": {
 	"title": {
 	"query": "⼩⽶电视",
 	"operator": "and"
 	}
  }
 }
}

解释:本例中包含“小米”和“电视”的词条才会被搜索到

1.3 词条匹配

term查询被⽤于精确值匹配,这些精确值可能是数字、时间、布尔或者那些未分词的字符串,keyword类型的字符串。

效果类似于: SELECT * FROM tableName WHERE colName='value'; 的SQL语句。

GET /yx/_search
{
 	"query": {
 	"term": {
 	"price": 2699.00
 	}
  }
}

1.4 布尔组合

bool把各种其它查询通过must(与)、must_not(⾮)、should(或)的⽅式进⾏组合。

GET /yx/_search
{
 "query": {
 	"bool": {
 		"must": {
 			"match": {
 				"title": "⼤⽶"
 			}
 		},
 		"must_not": {
 			"match": {
 				"title": "电视"
 			}
 		},
 		"should": {
 			"match": {
 				"title": "⼿机"
 			}
 		}
 	}
  }
}

1.5 范围查询(range)

range查询找出那些落在指定区间内的数字或者时间。

GET /yx/_search
{
 	"query": {
 		"range": {
 			"price": {
 				"gte": 3000,
 				"lte": 4000
 			}
 		}
 	}
}

range查询允许一下字符:

操作符说明
gt大于
gte大于等于
lt小于
lte小于等于

1.6 模糊查询(fuzzy)

fuzzy查询是term查询的模糊等价,很少直接使⽤它。

GET /yx/_search
{
 	"query": {
 		"fuzzy": {
 			"title": "Appla"
 		}
 	}
}

2.结果过滤

默认情况下,Elasticsearch在搜索的结果中,会把⽂档中保存在 _source 的所有字段都返回。

如果我们只想获取其中的部分字段,我们可以添加 _source 的过滤。

2.1 直接指定字段

GET /yx/_search
{
 	"_source": ["title", "price"],
 	"query": {
 		"term": {
 			"price": 2699
 		}
 	}
}

2.2 指定includes和excludes

属性描述
includes来制定想要显示的字段
excludes来制定不想要显示的字段

二者可选

示例:

GET /yx/_search
{
 "_source": {
 	"includes": ["title", "images"]
 },
 "query": {
 	"term": {
 		"price": 2699
 	}
 }
}


GET /yx/_search
{
 "_source": {
 	"excludes": ["price"]
 },
 "query": {
 	"term": {
 		"price": 2699
 	}
 }
}

2.3 过滤(filter)

Elasticsearch使⽤的查询语⾔(DSL)拥有⼀套查询组件,这些组件可以以⽆限组合的⽅式进⾏搭配。

这套组件可以在以下两种情况下使⽤:

​ 过滤情况(fifiltering context)和查询情况(query context)。

那么如何选择查询与过滤?

​ 通常的规则是,使⽤查询(query)语句来进⾏全⽂搜索或者其它任何需要影响相关性得分的搜索。 除此以外的情况都使⽤过滤(fifilters)。

2.3.1 条件查询中进行过滤

如果我们需要在查询结果中进行过滤,并且不希望过滤条件影响评分,这个时候就可以使用filter:

GET /yx/_search
{
 "query": {
 	"bool": {
 		"must": {
 			"match": {
 				"title": "⼩⽶⼿机"
 			}
 		},
 		"filter": {
 			"range": {
 				"price": {
 					"gt": 2000.00,
 					"lt": 3800.00
 				}
 			}
 		}
 	}
  }
}

2.3.2 无查询条件直接过滤

如果一次查询只有过滤,没有查询条件,不希望进行评分,我们可以使用constant_score取代只有filter语句的查询。在性能上是完全相同的,但对于提高查询简洁性和清晰度有很大帮助

GET /yx/_search
{
 "query": {
 	"constant_score": {
 		"filter": {
 			"range": {
 				"price": {
 					"gt": 2000.00,
 					"lt": 3800.00
 				}
 			}
 		}
 	}
  }
}

3.结果排序

3.1 单字段排序

sort可以让我们按照不同的字段进⾏排序,并且通过order指定排序的⽅式

属性描述
asc升序排序
desc降序排序

示例:

GET /yx/_search
{
 "query": {
 	"match": {
 		"title": "⼩⽶⼿机"
 	}
 },
 "sort": [
 {
 	"price": {
 		"order": "desc"
 	}
 }
 ]
}

3.2 多字段排序

4 分页查询

Elasticsearch的分⻚与MySQL数据库⾮常相似,都是指定两个值:

属性描述
from目标数据的偏移值(开始位置),默认from为0
size每页大小

示例:

GET /yx/_search
{
 "query": {
 	"match_all": {}
 },
 "sort": [
 	{
 		"price": {
 		"order": "desc"
 		}
 	}
 ],
 "from": 1,
 "size": 3
}

响应结果:

{
 	"took": 17,
 	"timed_out": false,
 	"_shards": {
 		"total": 5,
 		"successful": 5,
 		"skipped": 0,
 		"failed": 0
 	},
 	"hits": {
 		"total": 5,
 		"max_score": null,
 		"hits": [
 			{
 				"_index": "yx",
 				"_type": "goods",
 				"_id": "2",
 				"_score": null,
 				"_source": {
 					"title": "IPhone⼿机",
 					"images": "http://image.yx.com/12479122.jpg",
 					"price": 6299,
 					"stock": 200,
 					"saleable": true,
 					"subTitle": "IPhone 15 Pro"
 			},
 			"sort": [
 				6299
 			]
 		},
 		{
 		"_index": "yx",
 		"_type": "goods",
 		"_id": "3",
 		"_score": null,
 		"_source": {
 			"title": "⼩⽶电视4A",
 			"images": "http://image.yx.com/12479122.jpg",
 			"price": 3899
 		},
 		"sort": [
 			3899
 		]
 	}
  ]
 }
}

5.高亮显示

高亮原理:

  • 服务端搜索数据,得到搜索结果
  • 把搜索结果中,搜索关键字都加上约定好的标签
  • 前端页面提前写好标签的css样式,即可高亮显示
GET /yx/_search
{
 	"query": {
 		"match": {
 			"title": "⼿机"
 		}
 	},
 	"highlight": {
 		"pre_tags": "<span>",
 		"post_tags": "</span>",
 		"fields": {
 			"title": {}
 		}
 	}
}

在使⽤match查询的同时,加上⼀个highlight属性。highlight属性提供以下属性:

属性描述
pre_tags前置标签
post_tags后置标签
fields需要高亮的字段
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值