创建索引

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

删除索引

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

索引设置

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

    • number_of_shards

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

配置分析器

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

自定义分析器

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

创建自定义分析器

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

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

元数据:_source 字段

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

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

默认映射

  1. 我们可以使用 default 映射对所有类型禁用 _all 字段,而只在 blog 字段上开启它:
  1. PUT /my_index
  2. {
  3. "mappings": {
  4. "_default_": {
  5. "_all": { "enabled": false }
  6. },
  7. "blog": {
  8. "_all": { "enabled": true }
  9. }
  10. }
  11. }
  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拦截器的使用

    拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可 ...

  2. Shiro Remember me设置

    1. 在Spring的相关配置文件中加入如下Remember me管理器配置: <!-- rememberMe管理器 --> <bean id="rememberMeMan ...

  3. elasticsearch数据结构

    无论是关系型数据库还是非关系型数据库,乃至elasticsearch这种事实上承担着一定储存作用的搜索引擎,数据类型都是非常重要而基础的概念.本文基于elasticsearch 5.x版本. 核心数据 ...

  4. 【Django】django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.

    最近学习Django的过程中,在cmd打算使用python manage.py shell来测试数据的时候,当我一导入自己写的model类,就发现报了这个错误django.core.exception ...

  5. 初学c# -- 开始学directx

    这些天对directx有兴趣了,开始慢慢学,先学基础,找了好些资料,为毛都写的辣么长呢,学习精简下来就几行. 安装个directx sdk,在win10里面文件夹C:\Windows\Microsof ...

  6. mysql 查看字段是否添加了索引

    show index from 数据库名.表名: 如果是在Navicat这些客户端可以不用写数据库名.

  7. ES6 的面向对象

    JavaScript 语言中,生成实例对象的传统方法是通过构造函数. function Animal(name, age) { this.name = name; this.age = age; } ...

  8. c#关于Mysql MySqlBulkLoader 批量上传

    有个list表有几万数据 用insert插入,速度跟蜗牛爬行, 几十个表,传起来可就需要时间了. 搜搜,发现有  MySqlBulkLoader  这个人家mysql 的dll 里边已经提供了这个方法 ...

  9. 关于requests库中文编码问题

    转自:代码分析Python requests库中文编码问题 Python reqeusts在作为代理爬虫节点抓取不同字符集网站时遇到的一些问题总结. 简单说就是中文乱码的问题.   如果单纯的抓取微博 ...

  10. BZOJ4386[POI2015]Wycieczki / Luogu3597[POI2015]WYC - 矩乘

    Solution 想到边权为$1$的情况直接矩乘就可以得出长度$<=t$ 的路径条数, 然后二分check一下即可 但是拓展到边权为$2$,$3$ 时, 需要新建节点 $i+n$ 和 $i+2n ...