创建索引

  1. 当我们需要确保索引被创建在适当数量的分片上,在索引数据之前设置好分析器和类型映射。
  2. 手动创建索引,在请求中加入所有设置和类型映射,如下所示:
PUT /my_index
{
"settings": { ... any settings ... },
"mappings": {
"type_one": { ... any mappings ... },
"type_two": { ... any mappings ... },
...
}
  1. 你可以通过在 config/elasticsearch.yml 中添加下面的配置来防止自动创建索引。
action.auto_create_index: false

删除索引

  1. 使用以下的请求来删除索引:
DELETE /my_index
  1. 用下面的方式删除多个索引
DELETE /index_one,index_two
DELETE /index_*
  1. 甚至可以删除所有索引
DELETE /_all

索引设置

  1. 下面是两个最重要的设置:

    • number_of_shards

      • 定义一个索引的主分片个数,默认值是 5。这个配置在索引创建后不能修改。
    • number_of_replicas
      • 每个主分片的复制分片个数,默认是 1。这个配置可以随时在活跃的索引上修改。
  2. 例如,我们可以创建只有一个主分片,没有复制分片的小索引。
PUT /my_temp_index
{
"settings": {
"number_of_shards" : 1,
"number_of_replicas" : 0
}
}
  1. 然后,我们可以用 update-index-settings API 动态修改复制分片个数
PUT /my_temp_index/_settings
{
"number_of_replicas": 1
}

配置分析器

  1. 第三个重要的索引设置是 analysis 部分,用来配置已存在的分析器或创建自定义分析器来定制化你的索引。
  2. 在下面的例子中,我们创建了一个新的分析器,叫做 es_std,并使用预定义的西班牙语停用词:
PUT /spanish_docs
{
"settings": {
"analysis": {
"analyzer": {
"es_std": {
"type": "standard",
"stopwords": "_spanish_"
}
}
}
}
}
  • es_std 分析器不是全局的,它仅仅存在于我们定义的 spanish_docs 索引中

自定义分析器

  1. 虽然 Elasticsearch 内置了一系列的分析器,但是真正的强大之处在于定制你自己的分析器。你可以通过在配置文件中组合字符过滤器,分词器和标记过滤器,来满足特定数据的需求。

创建自定义分析器

  1. 与索引设置一样,我们预先配置好 es_std 分析器,我们可以再 analysis 字段下配置字符过滤器,分词器和标记过滤器:
PUT /my_index
{
"settings": {
"analysis": {
"char_filter": { ... custom character filters ... },
"tokenizer": { ... custom tokenizers ... },
"filter": { ... custom token filters ... },
"analyzer": { ... custom analyzers ... }
}
}
}
  1. 作为例子,我们来配置一个这样的分析器:

    • 用 html_strip 字符过滤器去除所有的 HTML 标签
    • 将 & 替换成 and,使用一个自定义的 mapping 字符过滤器
    "char_filter": {
    "&_to_and": {
    "type": "mapping",
    "mappings": [ "&=> and "]
    }
    }
    • 使用 standard 分词器分割单词
    • 使用 lowercase 标记过滤器将词转为小写
    • 用 stop 标记过滤器去除一些自定义停用词。
    "filter": {
    "my_stopwords": {
    "type": "stop",
    "stopwords": [ "the", "a" ]
    }
    }
    • 根据以上描述来将预定义好的分词器和过滤器组合成我们的分析器:
    "analyzer": {
    "my_analyzer": {
    "type": "custom",
    "char_filter": [ "html_strip", "&_to_and" ],
    "tokenizer": "standard",
    "filter": [ "lowercase", "my_stopwords" ]
    }
    }
    • 用下面的方式可以将以上请求合并成一条:
    PUT /my_index
    {
    "settings": {
    "analysis": {
    "char_filter": {
    "&_to_and": {
    "type": "mapping",
    "mappings": [ "&=> and "]
    }},
    "filter": {
    "my_stopwords": {
    "type": "stop",
    "stopwords": [ "the", "a" ]
    }},
    "analyzer": {
    "my_analyzer": {
    "type": "custom",
    "char_filter": [ "html_strip", "&_to_and" ],
    "tokenizer": "standard",
    "filter": [ "lowercase", "my_stopwords" ]
    }}
    }}}
    • 然后查看下(es5.0版本后的查询格式)
    GET /my_index/_analyze
    {
    "analyzer": "my_analyzer",
    "text":"The quick & brown fox"
    }
    • 5.0前老版本
    GET /my_index/_analyze?analyzer=my_analyzer
    The quick & brown fox
    • 结果
    {
    "tokens": [
    {
    "token": "quick",
    "start_offset": 4,
    "end_offset": 9,
    "type": "<ALPHANUM>",
    "position": 1
    },
    {
    "token": "and",
    "start_offset": 10,
    "end_offset": 11,
    "type": "<ALPHANUM>",
    "position": 2
    },
    {
    "token": "brown",
    "start_offset": 12,
    "end_offset": 17,
    "type": "<ALPHANUM>",
    "position": 3
    },
    {
    "token": "fox",
    "start_offset": 18,
    "end_offset": 21,
    "type": "<ALPHANUM>",
    "position": 4
    }
    ]
    }

元数据:_source 字段

  1. 在搜索请求中你可以通过限定 _source 字段来请求指定字段:
GET /_search
{
"query": { "match_all": {}},
"_source": [ "title", "created" ]
}
  1. 元数据:_all 字段

    • 如果你决定不再使用 _all 字段,你可以通过下面的映射禁用它:
    PUT /my_index/_mapping/my_type
    {
    "my_type": {
    "_all": { "enabled": false }
    }
    }

默认映射

  1. 我们可以使用 default 映射对所有类型禁用 _all 字段,而只在 blog 字段上开启它:
PUT /my_index
{
"mappings": {
"_default_": {
"_all": { "enabled": false }
},
"blog": {
"_all": { "enabled": true }
}
}
}
  1. default 映射也是定义索引级别的动态模板的好地方。

总结

  1. 一口气学到这里,这章开始已经有点力不从心了,很多东西已经理解不了了,需要实际工作中,不断查找资料深入学习理解才能掌控了,索引管理的内容这里并不全面,我理解不了的地方这里我也不写了~

参考 https://es.xiaoleilu.com/070_Index_Mgmt/25_Mappings.html

ElasticSearch权威指南学习(索引管理)的更多相关文章

  1. ElasticSearch权威指南学习(分布式集群)

    空集群 只有一个空节点的集群 一个节点(node)就是一个Elasticsearch实例,而一个集群(cluster)由一个或多个节点组成,它们具有相同的cluster.name,它们协同工作,分享数 ...

  2. ElasticSearch权威指南学习(映射和分析)

    概念 映射(mapping)机制用于进行字段类型确认,将每个字段匹配为一种确定的数据类型(string, number, booleans, date等).+ 分析(analysis)机制用于进行全文 ...

  3. ElasticSearch权威指南学习(分布式搜索)

    查询阶段 在初始化查询阶段(query phase),查询被向索引中的每个分片副本(原本或副本)广播. 每个分片在本地执行搜索并且建立了匹配document的优先队列(priority queue). ...

  4. ElasticSearch权威指南学习(结构化查询)

    请求体查询 简单查询语句(lite)是一种有效的命令行adhoc查询.但是,如果你想要善用搜索,你必须使用请求体查询(request body search)API. 空查询 我们以最简单的 sear ...

  5. ElasticSearch权威指南学习(分布式文档存储)

    路由文档到分片 当你索引一个文档,它被存储在单独一个主分片上.Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢? 进程不能是 ...

  6. ElasticSearch权威指南学习(文档)

    什么是文档 在Elasticsearch中,文档(document)这个术语有着特殊含义.它特指最顶层结构或者根对象(root object)序列化成的JSON数据(以唯一ID标识并存储于Elasti ...

  7. ElasticSearch权威指南学习(排序)

    排序方式 相关性排序 默认情况下,结果集会按照相关性进行排序 -- 相关性越高,排名越靠前. 相关性分值会用_score字段来给出一个浮点型的数值,所以默认情况下,结果集以_score进行倒序排列. ...

  8. HTTP权威指南-学习笔记

    目录 HTTP权威指南-学习笔记 HTTP: Web的基础 URL与资源 HTTP报文 连接管理 HTTP结构 Web服务器 代理 缓存 集成点: 网关,隧道及中继 Web机器人 识别,认证与安全 客 ...

  9. Elasticsearch权威指南(中文版)

    Elasticsearch权威指南(中文版) 下载地址: https://pan.baidu.com/s/1bUGJmwS2Gp0B32xUyXxCIw 扫码下面二维码关注公众号回复100010 获取 ...

随机推荐

  1. springboot @Value获取值为空,解决办法

    在spring中,常常使用 @Value("${property}") 从application.properties中取值,需要注意两点 使用 @Value 的类不能使用 new ...

  2. metrics+spring+influxdb整合

    1.在maven项目的pom.xml引入metrics-spring和metrics-influxdb两个jar包 <dependency> <groupId>com.ryan ...

  3. HDU-1078.FatMouseandCheese(线性dp + dfs)

    本题大意:在一个n * n的迷宫内进行移动,左上角为初始位置,每次可以走的步数不能超过m,并且每次走的方格上面的数字要大于前一次走的放个数字,不能走到格子外面,问如何能使得到的数字和最大. 本题思路: ...

  4. python动态模块导入

    首先创建一个模块目录lib,然后在目录内创建一个模块为:aa.py 官方推荐: import importlib aa = importlib.import_module('lib.aa') c = ...

  5. 【python深入】dict和list实现排序:sorted()和lambda的使用

    Python中经常需要对dict中的key值或者value值进行排序,可以通过sorted方法和lambda结合使用,接下来就是sorted()和lambda 一.sorted()和lambda so ...

  6. java基础 ---- 练习for循环

    -----   使用for循环打印图形 //打印矩形 public class Print { public static void main(String[] args) { for(int i=1 ...

  7. Head First Servlets & JSP 学习笔记 第十三章 —— 过滤器的威力

    过滤器可能是最强大的Web应用开发工具了! 与Servlet非常类似,过滤器就是Java组件,请求发送到Servlet之前,可以用过滤器截获和处理请求:另外Servlet结束工作之后,但在响应发回给客 ...

  8. node.js中process进程的概念和child_process子进程模块的使用

    进程,你可以把它理解成一个正在运行的程序.node.js中每个应用程序都是进程类的实例对象. node.js中有一个 process 全局对象,通过它我们可以获取,运行该程序的用户,环境变量等信息. ...

  9. node.js中实现http服务器与浏览器之间的内容缓存

    一.缓存的作用 1.减少了数据传输,节约流量. 2.减少服务器压力,提高服务器性能. 3.加快客户端加载页面的速度. 二.缓存的分类 1.强制缓存,如果缓存有效,则不需要与服务器发生交互,直接使用缓存 ...

  10. 完全理解 Python 迭代对象、迭代器、生成器

    完全理解 Python 迭代对象.迭代器.生成器 2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 分享到: 原文出处: liuzhijun    本文源自RQ作者 ...