• 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"}
  • 相关阅读:
    Html.Partial和Html.RenderPartial, Html.Action和Html.RenderAction的区别
    cygwin下git出现cabundle.crt相关错误的解决办法
    Orchard CMS前台页面为什么没有Edit链接?
    Entity Framework练习题
    分析Autofac如何实现Controller的Ioc(Inversion of Control)
    在Winform,Silvelight,WPF等程序中访问Asp.net MVC web api
    适合.net程序员的.gitignore文件
    如何处理Entity Framework中的DbUpdateConcurrencyException异常
    Asp.net MVC中repository和service的区别
    smplayer中使用srt字幕乱码问题
  • 原文地址:https://www.cnblogs.com/libin2015/p/10371356.html
Copyright © 2020-2023  润新知