Elasticsearch 安装请参考 搭建ELK日志管理平台 - - 2 ElasticSearch部署

01 创建索引

curl -XPUT 172.16.255.131:9200/vipinfo # 创建数据库
curl -XPUT 172.16.255.131:9200/vipinfo?pretty # json格式返回输出

es按条件删除索引数据 eshead删除索引_big data

  1. 主节点:默认配置是1个分片1个副本
  2. 主数据分片: 数据在分片中被分组存储,例如如果分片是3个的话,存入数据hello可能被拆分存储在这几个分片之中
  3. 副本数据分片: 对数据分片的拷贝
  4. 集群健康值: 黄色表示当前配置不满足默认配置,但是存储的数据是完整的

设置索引的分片与备份

例如创建索引配置为分为5个分片,每个分片1个副本的语句如下:

curl -XPUT '172.16.255.131:9200/logsys?pretty' -H 'Content-Type:application/json' -d'{"settings": { "index": {"number_of_shards": 5, "number_of_replicas": 1}}}'

值得注意的是,在创建索引时,索引名不能包含大写字母。

02 插入文档数据

往user类型中插入3条json格式的数据,/user/1主键id不能重复,如果不指定id会随机生成id

ES相较于MySql的特点 :ES在插入数据时不需要预先创建数据库和数据表,在插入过程中如果数据库或表不存在,则直接根据插入语句中/vipinfo/user/创建对应的数据库和表。

插入数据提高性能的一种操作方式:ES的特点之一随机id机制不会出现重复情况,所以在插入数据时不自己指定主键id,这样可以直接避免在插入数据过程中进行主键id判断的性能损耗。使用随机主键的一个缺点就是给查询带来困难,一种解决方案就是在插入的数据中单独设置一个类似于MySql中主键的字段自定义主键id,便于查询操作。

curl -XPUT '172.16.255.131:9200/vipinfo/user/1?pretty' -H 'Content-Type: application/json' -d'
{
    "first_name": "Wang",
    "last_name": "Haihua",
    "age": 25,
    "about": "I love you",
    "interests": ["basketball","music"]
}'
curl -XPUT '172.16.255.131:9200/vipinfo/user/2?pretty' -H 'Content-Type: application/json' -d'
{
    "first_name": "Wang",
    "last_name": "Haihua",
    "age": 25,
    "about": "I love you",
    "interests": ["basketball","music"]
}'

curl -XPUT '172.16.255.131:9200/vipinfo/user/3?pretty' -H 'Content-Type: application/json' -d'
{
    "first_name": "Wang",
    "last_name": "Haihua",
    "age": 25,
    "about": "I love you",
    "interests": ["basketball","music"]
}'

es按条件删除索引数据 eshead删除索引_数据_02

03 查询数据

  • 在ES-head插件中查询:实时查询,直接在对应字段进行关键词查询

es按条件删除索引数据 eshead删除索引_elasticsearch_03

  • 查询索引所有数据:使用 GET 方法,然后增加_search命令查询索引中所有数据
curl -XGET 172.16.255.131:9200/vipinfo/_search?pretty
  • 根据主键id查询文档数据:使用 GET 方法,并指定类型和主键id查询对应数据
curl -XGET 172.16.255.131:9200/vipinfo/user/1?pretty
  • 根据指定条件查询文档数据:使用 GET 方法,并使用_search命令和类似于MySql中的where的命令q=type_name传查询条件参数
curl -XGET '172.16.255.131:9200/vipinfo/user/_search?p=first_name:Wang&pretty'
curl -XGET '172.16.255.131:9200/vipinfo/user/_search?p=age:25&pretty'
  • 使用Query-string查询:可用于多条件查询
curl -XPUT '172.16.255.131:9200/vipinfo/user/_search?pretty' -H 'Content-Type: application/json' -d'
{
    "query": {
        "match": {
            "first_name": "Wang"
        }
    }
}'
curl -XPUT '172.16.255.131:9200/vipinfo/user/_search?pretty' -H 'Content-Type: application/json' -d'
{
    "query": {
        "bool": {
            "must": {
                    "match": {
                        "first_name": "Wang"
                     }
            },
            "filter": {
                "range": {
                    "age": {"lt": 30}   
                }
            }
        }
    }
}'
  • 更加简单的查询-使用工具:直接使用ES-head插件进行查询,可以设置多个条件,直接避免了复杂繁琐的命令语句查询

es按条件删除索引数据 eshead删除索引_数据_04

04 修改文档数据

  • PUT方法更新:需要和插入一样填写完整的信息
curl -XPUT '172.16.255.131:9200/vipinfo/user/1?pretty' -H 'Content-Type: application/json' -d'
{
    "first_name": "Wang",
    "last_name": "Haihua",
    "age": 30,
    "about": "I love you",
    "interests": ["basketball","music"]
}'
  • POST方法更新:只需要填写需要更改的信息,但是可能出现其他数据被覆盖的情况
curl -XPOST '172.16.255.131:9200/vipinfo/user/1?pretty' -H 'Content-Type: application/json' -d'
{
    "age": 30
}'
  • 更加简单的修改-使用工具:直接使用ES-head插件的复合查询功能进行修改,可以反复使用,减少重复工作

05 删除数据

  • DELETE方法删除数据:直接使用DELETE方法删除文档数据或者整个索引
curl -XPUT '172.16.255.131:9200/vipinfo/uesr/1?pretty'
curl -XPUT 172.16.255.131:9200/vipinfo?pretty
  • 更加简单的删除-使用工具:直接使用ES-head插件的复合查询功能进行删除,可以反复使用,减少重复工作

es按条件删除索引数据 eshead删除索引_es按条件删除索引数据_05