Elasticsearch技术解析与实战-索引

1.索引管理

创建索引

PUT http://127.0.0.1:9200/secisland
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "aliases": {},
  "mappings": {
    "doc": {
      "properties": {
        "sign_id": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 128
            }
          }
        },
        "pin": {
          "type": "keyword"
        },
        "app_id": {
          "type": "keyword"
        },
        "msg_content": {
          "type": "text"
        },
        "create_time": {
          "type": "date",
          "format": "yyyyMMddHHmmss||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"
        },
        "mobile_num": {
          "type": "keyword"
        },
        "expand_num": {
          "type": "keyword"
        },
        "data_coding": {
          "type": "keyword"
        }
      }
    }
  }
}

删除索引

DELETE http://127.0.0.1:9200/secisland/

获取索引信息

GET http://127.0.0.1:9200/secisland/

打开、关闭索引

POST http://127.0.0.1:9200/secisland/_open
POST http://127.0.0.1:9200/secisland/_close

可以同时打开或关闭多个索引,全部索引可以使用_all打开或关闭,或者使用通配符表示全部(比如*)。

设置config/elasticsearch.yml 属性 action.destructive_requires_name 为 true,禁止使用通配符或者_all。

关闭索引会继续占用磁盘空间。

设置settingscluster.indices.close.enable 为 false ,禁止使用关闭索引功能。

 

判断索引是否存在

HEAD http://127.0.0.1:9200/secisland

 

2.索引映射管理

修改映射

PUT http://127.0.0.1:9200/secisland/_mapping/doc
{
  "properties": {
    "name": {"type": "keyword"}
  }
}

# 可以同时修改多个索引映射,索引名称支持逗号分隔,_all,通配符*。

获取映射

GET http://127.0.0.1:9200/secisland/_mapping/doc

 获取字段映射

GET http://127.0.0.1:9200/secisland/_mapping/doc/field/text

格式:

GET host:port/{index}/_mapping/doc/field/{field}

#{index},{field}可以使用逗号分割,也可以使用通配符,其中{index}可以使用_all表示全部索引

 3.索引别名

创建别名

格式:PUT /{index}/_alias/{name}
参数:{"routing":"1","filter":{}}

{index} 可以使用*,_all,正则表达式或者逗号分隔
{name} 索引名称 

PUT http://127.0.0.1:9200/secisland/_alias/user_12
{
  "routing":"12",
  "filter":{
    "term":{"user_id":12}
  }
}

删除别名

DELETE http://127.0.0.1:9200/secisland/_alias/user_12

查询别名

GET http://127.0.0.1:9200/secisland/_alias/*
GET http://127.0.0.1:9200/_alias/user_12

判断别名是否存在

HEAD http://127.0.0.1:9200/secisland/_alias/user_12
HEAD http://127.0.0.1:9200/secisland/_alias/*
HEAD http://127.0.0.1:9200/_alias/user_12
HEAD http://127.0.0.1:9200/_alias/*

4.索引配置

更新索引配置

PUT http://127.0.0.1:9200/secisland/_setting
{
  "index":{"number_of_replicas":4}
}

更新分词器

添加分析器前,必须先关闭索引,添加后再打开索引。

POST http://127.0.0.1:9200/secisland/_close
PUT http://127.0.0.1:9200/secisland/_settings
{
  "analysis":{
    "analyzer":{
    "content":{"type":"custom","tokenizer":"whitespace"}
    }
  }
}
POST http://127.0.0.1:9200/secisland/_open

获取配置

GET http://127.0.0.1:9200/secisland/_open

 索引分析

包括3个过程:
字符过滤器(character filter)->分词器(tokenizer)->标记过滤器(token filters)

测试分析器
POST http://127.0.0.1:9200/_analyze
{
  "analyzer":"standard",
  "text":"this is a test"
}

POST http://127.0.0.1:9200/_analyze
{
  "tokenizer":"keyword",
  "token_filters":["lowercase"],
  "char_filters":["html_strip"],
  "text":"detailed output",
  "explain":true
}

索引模板

创建模板,适配te*索引
PUT http://127.0.0.1:9200/_template/template_1
{
  "template":"te*",
  "settings":{},
  "mapping":{}
}

删除模板
DELETE http://127.0.0.1:9200/_template/template_1

获取模板
GET http://127.0.0.1:9200/_template/template_1
GET http://127.0.0.1:9200/_template/temp*
GET http://127.0.0.1:9200/_template/template_1,template_2
GET http://127.0.0.1:9200/_template/

判断索引是否存在
HEAD http://127.0.0.1:9200/_template/template_1

多模板匹配,合并多模板配置,如果配置重复,这是应设置order属性,0开始,数值低优先级高,优先级相同,后匹配的覆盖之前的配置。

重建索引

可以指定查询条件,同时支持通过脚本修改文档。
POST http://127.0.0.1:9200/_reindex
{
  "size":10000,
  "source":{
    "index":"secisland",
    "query":{
      "match":{"company": "cat"}
    }
  },
  "dest":{"index":"new_secisland", "version_type":"external","routing":"=cat"},
  "script":{
    "internal":"if (ctx._souce.foo == 'bar') {ctx._version++;ctx._source.remove('foo')}"
  }
}

5.索引监控

索引统计接口

GET http://127.0.0.1:9200/_stats
GET http://127.0.0.1:9200/_stats/indexing
GET http://127.0.0.1:9200/index1,index2/_stats/indexing

统计项:
docs:文档、删除文档(没有合并的文档)的数量。受刷新频率的影响。
store:索引的大小。
indexing:索引统计数据。
get:获取统计数据,包含缺失统计。
search:搜索统计数据。可以统计不同groups的数据。
completion:完成建议统计数据。
fielddata:字段数据统计数据。
flush:冲洗统计数据。
merge:merge统计数据。
request_cache:分片请求缓存统计数据。
refresh:刷新统计数据。
suggest:建议统计数据
translog:事物日志统计数据。

 索引分片接口

GET http://127.0.0.1:9200/secisland/_segments


索引分片信息:
_3:json文档的键名,代表分片的名称。用来生成文档名,所有以分片名开头的文档属于这个分片。
generation:需要写新的分片时生成的数值,基本是递增的。分片名从这个数字派生出来。
num_docs:存储在分片中没有被删除的文档数量。
deleted_docs:存储在分片中被删除的数量。
size_in_bytes:分片使用的磁盘空间。
memory_in_bytes:分片占用的内存数量。
committed:分片在磁盘上是否同步。
search:分片是否可以搜索。
version:写分片的lucene版本。
compound:分片是否存储在符合文件中。

索引恢复接口

GET http://127.0.0.1:9200/secisland/_recovery

索引恢复输出字段:
id:分片。
type:恢复类型:存储、快照、复制、迁移。
stage:恢复阶段:初始化(没有开始)、索引(读取索引元字段,从源复制到目的地)、开始(启动恢复;开启使用的索引)、事物日志(重做事物日志)、完成(清理)、结束。
primary:true为主分片;false为从分片。
start_time:恢复开始时间戳。
stop_time:恢复结束时间戳。
total_time_in_millis:恢复时间(毫秒)。
source:恢复原:如果是快照恢复,描述备份仓库;否则描述源节点。
target:目标节点。
index:物理索引恢复的统计数据。
translog:事物日志恢复的统计数据。
start:打开和启动索引的时间统计数据。

索引分片存储接口

GET http://127.0.0.1:9200/secisland/_shard_stores?status=green

6.状态管理

清除缓存

GET http://127.0.0.1:9200/secisland/_cache/clear
#可以明确设置query、fielddata、request来清理特定缓存。

索引刷新

POST http://127.0.0.1:9200/secisland/_refresh

冲洗

POST http://127.0.0.1:9200/secisland/_flush
#将数据保存的索引存储,清除内部事务日志,释放内存空间。

合并索引

POST http://127.0.0.1:9200/secisland/_forcemerge

参数:
max_num_segments:用于合并的分片数量。为了充分合并,可以设置值为1。默认执行是简单的检查是否需要合并,如果需要则执行合并。
only_expunge_deletes:合并过程是否删除分片中被删除的文档。默认是false。
flush:合并后是否执行冲洗,默认是true。

 7.文档管理

增加文档

PUT http://127.0.0.1:9200/secisland/doc/1
{
  "a":1
}
  1. 自动创建索引相关:action.auto_create_index=false 禁用自动创建索引。
    index.mapper.dynamic=false 禁用自动映射字段类型。
    自动创建索引可以通过索引模板设置索引,
    action.auto_create_index=+aaa*,-bbb*,+ccc*,(+表示允许,-表示禁止)
  2. 版本号常用在对事物的处理中,操作的时候指定版本号,系统则会对版本号进行检查。
  3. op_type=create 写入文档时,如果文档存在则会报错,如果不知道操作类型为create,则会更新数据。
 

更新文档

PUT http://127.0.0.1:9200/secisland/doc/1/_update
{
  "a":2
}

删除文档

DELETE http://127.0.0.1:9200/secisland/doc/1

查询文档

GET http://127.0.0.1:9200/secisland/doc/1
多种查询条件和参数,此处不做详解。

多文档操作

POST http://127.0.0.1:9200/_mget
{
  "docs":[
    {"_indes":"secisland", "id":"1"},
    {"_indes":"secisland", "id":"2"}
  ]
}

块操作

POST http://127.0.0.1:9200/_bulk
{"index":{"_index":"secisland","_id":"10"}}
{"field1":"value1"}
{"index":{"_index":"secisland","_id":"11"}}
{"field1":"value2"}

 

posted @ 2019-02-23 20:55  粒子先生  阅读(567)  评论(0编辑  收藏  举报