前言
上一篇记录了版本、工具以及注意的事项。
这篇就对 ElasticSearch 命令的使用进行记录。
与SpringBoot的整合 请见:ElasticSearch 入门 (三)
在 Kibana 开发工具中学习 ElasticSearch 的命令
链接: http://localhost:5601/app/dev_tools#/console
注意运行时,鼠标光标一定要放在你要运行的指令上。
_doc 为默认的类型。今后好像要取消类型这个东西!!!!
_doc 为默认的类型。今后好像要取消类型这个东西!!!!
_doc 为默认的类型。今后好像要取消类型这个东西!!!!
- 创建命令
// PUT 创建命令 索引(student) 类型(_doc) id(1)
PUT /student/_doc/1
{
"name":"张三",
"age":18
}
返回结果:
// 警告信息:不支持在文档索引请求中指定类型
// 而是使用无类型的端点(/{index}/_doc/{id}, /{index}/_doc,或
/{index}/_create/{id})。
{
"_index" : "student", // 索引
"_type" : "_doc", // 类型
"_id" : "1", // id
"_version" : 1, // 版本
"result" : "created", // 操作类型
"_shards" : { // 分片信息
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
可以通过 elasticsearch-head 进行查看:
- 指定索引中各个字段的类型
字符类型:text 、 keyword
数值类型:long, integer, short, byte, double, flfloat, half_flfloat, scaled_flfloat
日期类型:date
布尔类型:boolean
二进制:binary
指定索引中各个字段的类型:
PUT /student2
{
"mappings":{
"properties": {
"name":{
"type": "text"
},
"age":{
"type": "long"
},
"birthday":{
"type": "date"
}
}
}
}
查看一下 索引 student2:
GET /student2
- 查看所有索引的状态健康情况 分片,数据储存大小等等:
GET _cat/indices?v
- 删除索引:
DELETE /student1
增删改查命令
- 新增命令
PUT /people/_doc/1
{
"name":"张三",
"age":30,
"desc":"不知道如何形容",
"tags":["丑男","旅游","交友"]
}
- 查询命令
GET /people/_doc/1
- 修改命令
使用 POST 命令,在 id 后面跟 _update ,要修改的内容放到 doc 文档(属性)中即可。
POST /people/_doc/1/_update
{
"doc":{
"name":"张三1"
}
}
状态会更新
- 条件查询
// 通过 _serarch?q=name:张三 查询条件是name属性有张三的那些数据。
GET /people/_doc/_search?q=name:张三
_score得分,就是根据算法算出和查询条件匹配度高得分就高。
- 构建查询
GET /people/_doc/_search
{
"query":{ // 构建的查询条件
"match": {
"name": "张三"
}
},
"sort":[ // 排序方式 desc asc
{
"age":{
"order":"desc"
}
}],
"_source":["name","desc","age"], // 需要展示的属性
"from":0, // 分页参数 from size
"size":2
}
- 布尔查询
must (and):
// 查询所有 name 属性为“ 张三 “的数据,并且年龄为30岁
GET /people/_doc/_search
{
"query":{
"bool": {
"must": [
{
"match": {
"name": "张三"
}
},
{
"match": {
"age": "30"
}
}
]
}
}
}
我们通过在 bool 属性内使用 must 来作为查询条件!看结果,是不是 有点像 and 的感觉,里面的条件需要都满足!
should (or):
// 查询所有 name 属性为“ 张三 “的数据,或者年龄为30岁
GET /people/_doc/_search
{
"query":{
"bool": {
"should": [
{
"match": {
"name": "张三1"
}
},
{
"match": {
"age": "30"
}
}
]
}
}
}
must_not (not): 操作同理。
Fitter:
// 名字为张三, 25<=年龄<=30
GET /people/_doc/_search
{
"query":{
"bool": {
"must": [
{
"match": {
"name": "张三"
}
}
],
"filter": [
{
"range": {
"age": {
"gte": 25, // gt 表示大于
"lte": 30 // gte 表示大于等于
} // lt 表示小于
} // lte 表示小于等于
}
]
}
}
}
- 短语检索
// 标签属性中带有 旅游 和 男 多个用空格隔开
GET /people/_doc/_search
{
"query":{
"match": {
"tags": "旅游 男"
}
}
}
- term查询精确查询
term和match的区别:
match是经过分析(analyer)的,也就是说,文档是先被分析器处理了,根据不同的分析器,分析出
的结果也会不同,在会根据分词 结果进行匹配。
term是不经过分词的,直接去倒排索引查找精确的值。
PUT testdb
{
"mappings":{
"properties":{
"name":{
"type":"text"
},
"desc":{
"type": "keyword"
}
}
}
}
// 添加数据
PUT testdb/_doc/1
{
"name": "张三喜爱Java name",
"desc": "张三喜爱Java desc"
}
上述中testdb索引中,字段name在被查询时会被分析器进行分析后匹配查询。而属于keyword类型不会
被分析器处理。
GET testdb/_search
{
"query":{
"term": {
"name": "张"
}
}
}
可以查到信息
{
"query":{
"term": {
"desc": "张"
}
}
}
不能查看信息,只能通过 张三喜爱Java desc 作为整体去查。
GET _analyze
{
"analyzer": "keyword", // "analyzer": "standard",
"text": "张三喜爱Java desc"
}
可以通过上述只能去查看一下具体。
总结:keyword 字段类型不会被分析器分析!
- 高亮显示
GET /people/_doc/_search
{
"query":{
"match": {
"name": "张三"
}
},
"highlight" :{
"pre_tags": "<b class='key' style='color:red'>", // 可以自定义
"post_tags": "</b>", // 可以自定义
"fields":{
"name":{}
}
}
}
返回结果:
总结:
一个索引下面只能创建一个类型就行了,其中各字段都具有唯一性,如果在创建映射的时候,如果没有指定文档类型,那么该索引的默认索引类型是 _doc ,不指定文档id则会内部帮我们生成一个id字符串。
本文参考了网上的资源。如有侵权请联系。