集群相关

使用以下请求即可看到所有关于es的监控信息

  1. http://8.129.84.57:9200/_cat

可使用的监控信息

可选监控信息
/_cat/allocation
查看节点磁盘以及资源分配信息
/_cat/shards
查看节点分片信息
/_cat/shards/{index}
查看具体索引的分片信息
/_cat/master
查看当前集群主节点信息
/_cat/nodes
查看当前集群所有节点信息
/_cat/tasks
显示当前在集群中执行的任务的信息
/_cat/indices
显示所有的索引信息
/_cat/indices/{index}
显示某一个索引信息
/_cat/segments
查看缓存信息
/_cat/segments/{index}
查看指定索引的缓存信息
/_cat/count
显示索引文档数量
/_cat/count/{index}
显示指定索引的文档数量
/_cat/recovery
显示内存信息
/_cat/recovery/{index}
显示指定索引的内存信息
/_cat/health
显示健康状态
/_cat/pending_tasks
显示正在等待的任务
/_cat/aliases
显示别名、过滤器、路由信息
/_cat/aliases/{alias}
显示指定别名的过滤器、路由信息
/_cat/thread_pool
查看线程池信息
/_cat/thread_pool/{thread_pools}
查看指定线程池信息
/_cat/plugins
显示每个运行插件节点的视图
/_cat/fielddata
查看fileddata的值,对分词的field,直接执行聚合操作,会报错,你必须要打开fielddata,然后将正排索引数据加载到内存中
/_cat/fielddata/{fields}
指定分词的fielddata
/_cat/nodeattrs
显示node节点属性
/_cat/templates 查看模板信息

结果数据优化

verbose

每个命令都支持使用?v参数,来显示详细的信息:

http://8.129.84.57:9200/_cat/shards?v

结果
image.png

hlep

每个命令都支持使用help参数,来输出可以显示的列:

http://8.129.84.57:9200/_cat/indices?help

结果
image.png

headers

通过h参数,可以指定输出的字段:
http://192.168.126.81:9200/_cat/nodes?v&h=ip,master,name

结果
image.png

索引增删改查

创建非结构化索引

在Lucene中,创建索引是需要定义字段名称以及字段的类型的,在Elasticsearch中提供了非结构化的索引,就是不 需要创建索引结构,即可写入数据到索引中,实际上在Elasticsearch底层会进行结构化操作,此操作对用户是透明 的。

PUT http://8.129.84.57:9200/my_index01
{
    "settings": {
    "index": {
      "number_of_shards": "2", //分片数
      "number_of_replicas": "0" //副本数
    }
    }
}

image.png

创建结构化索引

与非结构话不同,在创建索引时我们需要指明索引的具体信息,这里topic就是我们的索引类型,注意在7.0以后是不需要指明索引类型的

PUT http://8.129.84.57:9200/my_index02
{
      "settings": {
      "index": {
        "number_of_shards": "2",
        "number_of_replicas": "2"
      }
    },
    "mappings": {
        "topic": {
            "properties": {
                "id": {
                    "type": "long",
                  "store": true,
                  "index":"false"
                },
                "title": {
                    "type": "text",
                  "store": true,
                  "index":"true",
                  "analyzer":"standard"
                },
                "content": {
                    "type": "text",
                  "store": true,
                  "index":"true",
                  "analyzer":"standard"
                }
            }
        }
    }
}

mapping中各参数解析

properties 具体的字段配置
id 字段
type 在7.0往后我们可以不指定文档文档类型
store 公共属性
index analyzed:编入索引供搜索、no:不编入索引、not_analyzed:不经分析编入索引(此值必须将类型设置为string才可以使用,但是在5.0后string已经被废弃)
而在6.0后值只能设置为false(编入索引)/true(不编入索引)
analyzer 定义用于索引和搜索的分析器名称,默认为全局定义的分析器名称。可以开箱即用的分析器:standard,simple,whitespace,stop,keyword,pattern,language,snowball

image.png

查看索引

get http://8.129.84.57:9200/my_index01

//结果如下
{
    "my_index02": {
        "aliases": {},
        "mappings": {
            "topic": {
                "properties": {
                    "content": {
                        "type": "text",
                        "store": true,
                        "analyzer": "standard"
                    },
                    "id": {
                        "type": "long",
                        "index": false,
                        "store": true
                    },
                    "title": {
                        "type": "text",
                        "store": true,
                        "analyzer": "standard"
                    }
                }
            }
        },
        "settings": {
            "index": {
                "creation_date": "1619922778491",
                "number_of_shards": "2",
                "number_of_replicas": "2",
                "uuid": "vBBhyx6cR1OW9vY9ZU12nQ",
                "version": {
                    "created": "6050499"
                },
                "provided_name": "my_index02"
            }
        }
    }
}

修改索引

PUT http://8.129.84.57:9200/my_index01/_settings

{
  "number_of_replicas": 1
}

image.png

删除索引

DELETE http://8.129.84.57:9200/my_index01/my_index01

image.png

索引数据增删改查

插入数据时可以指定id插入也可以不指定id插入说明:非结构化的索引,不需要事先创建,直接插入数据默认创建索引。

增加数据(带id)

注意在7.0后没有索引类型这一概念,所以不需要指明索引类型,但是需要使用_doc代替,而在8.0则完全移除了,只需要指明索引和id

POST http://8.129.84.57:9200/my_index02/topic/1000

{
  "id":1000,
  "title":"插入数据",
  "content":"插入一条带id的数据"
}

image.png

增加数据(不带id)

POST http://8.129.84.57:9200/my_index02/topic

{
  "id":1001,
  "title":"插入数据",
  "content":"插入一条不带id的数据"
}

image.png

查询数据

这里查询只是简单查询,如果要查询具体的值可以将_search替换为id号,同时关于DSL搜索,高亮显示,聚合,中文分词搜索将会单独开一篇

http://8.129.84.57:9200/my_index02/topic/_search

响应结果

{
    "took": 75,
    "timed_out": false,
    "_shards": {
        "total": 2,
        "successful": 2,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 1.0,
        "hits": [
            {
                "_index": "my_index02",
                "_type": "topic",
                "_id": "Q2D-KnkB1Q44_apWZULk",
                "_score": 1.0,
                "_source": {
                    "id": 1001,
                    "title": "插入数据",
                    "content": "插入一条不带id的数据"
                }
            },
            {
                "_index": "my_index02",
                "_type": "topic",
                "_id": "1000",
                "_score": 1.0,
                "_source": {
                    "id": 1000,
                    "title": "插入数据",
                    "content": "插入一条带id的数据"
                }
            }
        ]
    }
}

可以看到如果我们没有带id的话他会默认存放一个id,但是为了以后更好的维护,建议带上id

删除数据

DELETE http://8.129.84.57:9200/my_index02/topic/Q2D-KnkB1Q44_apWZULk

image.png
result代表已经删除,数据每被修改一次version便会 + 1,之后查询会提示404,这里注意:删除一个文档也不会立即从磁盘上移除,它只是被标记成已删除。Elasticsearch将会在你之后添加更多索引的 时候才会在后台进行删除内容的清理

修改数据

在Elasticsearch中,文档数据是不为修改的,但是可以通过覆盖的方式进行更新。

POST http://8.129.84.57:9200/my_index02/topic/1000

{
  "id":1001,
  "title":"插入数据",
  "content":"更新了一次数据"
}

image.png
此时如果我们只传入一个值呢?
image.png
很显然他把我们的数据全部给覆盖了
image.png
那么问题来了,可以局部更新吗?答案时可以的。 但是前面不是说,文档数据不能更新吗? 其实是这样的: 在内部,依然会查询到这个文档数据,然后进行覆盖操作,步骤如下:

POST http://8.129.84.57:9200/my_index02/topic/1000/_update

{
    "doc": {
        "id":1002,
        "title":"局部更新数据"
    }
}

image.png

这里我们没有传content,按之前的操作应该会把我们的content给清空,然而结果如何
image.png
可以看到content没有被覆盖