Elasticsearch 基础API

基本请求格式

pretty用于格式化输出

http://ip:port/Index/Type/DocumentId?pretty

创建索引

######1.非结构化索引######

# 创建名为rotao_test_index的索引
$ curl -H 'Content-Type: application/json'  -XPUT 'http://192.168.123.123:9200/rotao_test_index' 

# 返回json对象说明创建成果
{"acknowledged":true,"shards_acknowledged":true,"index":"rotao_test_index"}

######2.结构化索引######
# 设置创建2个分片及一个备份,并设置it_man的类型定义以及字段类型定义
$ curl -H 'Content-Type: application/json'  -XPUT 'http://192.168.123.123:9200/rotao_test_index2' -d '{
    "settings": {
        "number_of_shards": 2,
        "number_of_replicas": 1
    },
    "mappings": {
        "it_man": {
            "properties": {
                "name": { # 创建字段并指定数据类型,使用普通索引
                  "type": "string",
                  "index": "not_analyzed"
                },
                "company": {
                    "type": "keyword"
                },
                "age": {
                    "type": "integer"
                }
            }
        }
    }
}'

##################################
参数说明:
settings:设置分片和备份副本数
mappings:对索引库中索引的字段名称及其数据类型进行定义,类似于mysql中的表结构信息。

一般不需要指定mapping都可以,因为es会自动根据数据格式识别它的类型,如果你需要对某些字段添加特殊属性(如:定义使用其它分词器、是否分词、是否存储等),就必须手动添加mapping。在es中添加索引数据时不需要指定数据类型,es中有自动影射机制,字符串映射为string,数字映射为long。通过mapping可以指定数据类型是否存储等属性。


##################################
Q:如何区分结构化与非结构化?
A:查询相应的索引信息,通过索引信息中的mappings字段来做区分

结构化索引,类似MySQL,我们会对索引结构做预定义,包括字段名,字段类型等;

非结构化索引,就类似Mongo,索引结构未知,根据具体的数据来update索引的mapping。

Q:如何选择两种索引呢?
A:跟具体的使用场景有关,结构化相比非结构化,更易优化,性能好些,非结构化相较灵活,只是频繁update索引mapping会有一定的性能损耗。

删除索引

$ curl -XDELETE '192.168.123.123:9200/rotao_test_index'
# 删除成功
{"acknowledged":true}

插入文档

# es自动生成id
$ curl -H 'Content-Type: application/json' -XPOST '192.168.123.123:9200/rotao_test_index/ie_woman/' -d'{"id":1,"name":"haha"}'

# 人工指定id
$ curl -H 'Content-Type: application/json' -XPOST '192.168.123.123:9200/rotao_test_index/ie_woman/1' -d'{"id":1,"name":"haha"}'

更新文档

# 直接修改
# 传递的文档参数需要放在json对象的doc字段下
$ curl -H 'Content-Type: application/json' -XPOST '192.168.123.123:9200/rotao_test_index/ie_woman/1/_update' -d'{"doc":{"name":"luotao2"}}'

# 脚本修改
# 说明:
# lang 指定脚本语言(painless为es内置的脚本语言)  
# inline指定脚本内容   ctx是es的上下文  _source代表当前的文档

# 当前文档的age字段自增1
$ curl -H 'Content-Type: application/json' -XPOST '192.168.123.123:9200/rotao_test_index/ie_woman/1/_update' -d'{
    "script": {
        "lang": "painless",
        "inline": "ctx._source.age += 1"
    }
}'

# 当前文档的age字段自增15
$ curl -H 'Content-Type: application/json' -XPOST '192.168.123.123:9200/rotao_test_index/ie_woman/1/_update' -d'{
    "script": {
        "lang": "painless",
        "inline": "ctx._source.age += params.age",
        "params": {
            "age": 15
        }
    }
}'

删除

# 删除文档
curl -XDELETE '192.168.123.123:9200/rotao_test_index/ie_woman/1'

# 删除索引
curl -XDELETE '192.168.123.123:9200/rotao_test_index'

发表评论