ES-索引管理

这篇具有很好参考价值的文章主要介绍了ES-索引管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

数据类型

​ 搜索引擎是对数据的检索,所以我们先从生活中的数据说起。我们生活中的数据总体分为两种:

  • 结构化数据
  • 非结构化数据

结构化数据: 也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。指具有固定格式或有限长度的数据,如数据库,元数据等。

非结构化数据: 又可称为全文数据,不定长或无固定格式,不适于由数据库二维表来表现,包括所有格式的办公文档、XML、HTML、Word 文档,邮件,各类报表、图片和咅频、视频信息等。

​ 如果要更细致的区分的话,XML、HTML 可划分为半结构化数据。因为它们也具有自己特定的标签格式,所以既可以根据需要按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理

数据搜索

根据两种数据分类,搜索也相应的分为两种:

  • 结构化数据搜索
  • 非结构化数据搜索

​ 对于结构化数据,因为它们具有特定的结构,所以我们一般都是可以通过关系型数据库(MySQL,Oracle 等)的二维表(Table)的方式存储和搜索,也可以建立索引。

​ 对于非结构化数据,也即对全文数据的搜索主要有两种方法:

  • 顺序扫描
  • 全文检索

顺序扫描: 通过文字名称也可了解到它的大概搜索方式,即按照顺序扫描的方式查询特定的关键字。

全文搜索: 将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这种方式就构成了全文检索的基本思路。**这部分从非结构化数据中提取出的然后重新组织的信息,我们称之为索引。**这种方式的主要工作量在前期索引的创建,但是对于后期搜索却是快速高效的。

Lucene

​ 对于这种非结构化数据的处理需要依赖全文搜索,而目前市场上开放源代码的最好全文检索引擎工具包就属于 Apache 的 Lucene了。但是 Lucene 只是一个工具包,它不是一个完整的全文检索引擎。Lucene 的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

​ 目前以 Lucene 为基础建立的开源可用全文搜索引擎主要是 Solr 和 Elasticsearch。Solr 和 Elasticsearch 都是比较成熟的全文搜索引擎,能完成的功能和性能也基本一样。但是 ES 本身就具有分布式的特性和易安装使用的特点,而 Solr 的分布式需要借助第三方来实现,例如通过使用 ZooKeeper 来达到分布式协调管理。

倒排索引

不管是 Solr 还是 Elasticsearch 底层都是依赖于 Lucene,而 Lucene 能实现全文搜索主要是因为它实现了倒排索引的查询结构。

如何理解倒排索引呢? 假如现有三份数据文档,文档的内容如下分别是:

  • Java is the best programming language.
  • PHP is the best programming language.
  • Javascript is the best programming language.

​ 为了创建倒排索引,需要通过分词器将每个文档的内容域拆分成单独的词(我们称它为词条或 Term),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。

这种结构由文档中所有不重复词的列表构成,对于其中每个词都有一个文档列表与之关联。这种由属性值来确定记录的位置的结构就是倒排索引。带有倒排索引的文件我们称为倒排文件。

名词解释
  • 词条(Term): 索引里面最小的存储和查询单元,对于英文来说是一个单词,对于中文来说一般指分词后的一个词。
  • 词典(Term Dictionary): 或字典,是词条 Term 的集合。搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。
  • 倒排表(Post list): 一个文档通常由多个词组成,倒排表记录的是某个词在哪些文档里出现过以及出现的位置。每条记录称为一个倒排项(Posting),倒排表记录的不单是文档编号,还存储了词频等信息。
  • 倒排文件(Inverted File): 所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件被称之为倒排文件,倒排文件是存储倒排索引的物理文件

​ **由此可知,倒排索引主要由词典和倒排文件组成。**词典和倒排表是 Lucene 中很重要的两种数据结构,是实现快速检索的重要基石。词典和倒排文件是分两部分存储的,词典在内存中而倒排文件存储在磁盘上。

索引管理的引入

​ 一般在增加文档时,会动态创建一个customer的index,而这个index实际上以及自动创建了它里面的字段(name)的类型。可以分析一下自动创建的mapping:

{
  "mappings": {
    "_doc": {
      "properties": {
        "name": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}

​ 如果需要对这个建立索引的过程做更多的控制:比如想要确保这个索引有数量适中的主分片,并且在我们索引任何数据之前,分析器和映射已经被建立好。那么就会引入两点:第一个禁止自动创建索引,第二个是手动创建索引

#禁止自动创建索引
#可以通过在 config/elasticsearch.yml 的每个节点下添加下面的配置:
action.auto_create_index: false

索引的格式

请求体里面传入设置或类型映射,如下所示:

PUT /my_index
{
    "settings": { ... any settings ... },
    "mappings": {
        "properties": { ... any properties ... }
    }
}
  • settings: 用来设置分片,副本等配置信息
  • mappings: 字段映射,类型等
    • properties: 由于type在后续版本中会被Deprecated, 所以无需被type嵌套

索引管理操作

手工创建索引

​ 创建一个user 索引test-index-users,其中包含三个属性:name,age, remarks; 存储在一个分片一个副本上。

PUT /test-index-users
{
  "settings": {
		"number_of_shards": 1,
		"number_of_replicas": 1
	},
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "age": {
        "type": "long"
      },
      "remarks": {
        "type": "text"
      }
    }
  }
}

# 插入数据
POST /test-index-users/_doc
{
"name":"zhangsan",
"age":"18",
"remarks":"hello world"
}

​ 如果输入类型不匹配,就会看到对应的不匹配的错误。

修改索引

# 修改副本数量为0
PUT /test-index-users/_settings
{
  "settings": {
    "number_of_replicas": 0
  }
}

打开/关闭索引

关闭索引

​ 一旦索引被关闭,那么这个索引只能显示元数据信息,不能够进行读写操作

​ 关闭索引命令为:POST /test-index-users/_close

ES-索引管理

打开索引

​ 打开索引命令:POST /test-index-users/_open

​ 打开之后就看可以写入正常。

删除索引

​ 将创建的test-index-users删除。命令:DELETE /test-index-users

​ 删除索引之后,再看mapping的索引的信息,就会发现之前新建索引所附加的字段信息没有了。

​ ES中的mapping有点类似与RDB中“表结构”的概念,在MySQL中,表结构里包含了字段名称,字段的类型还有索引信息等。在Mapping里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性,并且在ES中一个字段可以有对个类型。

1)先获取基础配置信息

GET /bank/_settings

ES-索引管理

2)获取映射mapping信息

GET /bank/_mapping

ES-索引管理

Kibana管理索引

​ Kibana管理索引,可以通过Management->Stack Management->Data->Index Management ->选择对应索引->点击Mappings 可查看索引结构

ES-索引管理

索引模版

前言

​ 上面介绍了索引的一些操作,特别是手动创建索引,但是批量和脚本化必然需要提供一种模板方式快速构建和管理索引,也就是索引模板(Index Template),它是一种告诉Elasticsearch在创建索引时如何配置索引的方法。

索引模版

​ 在创建索引之前可以先配置模板,这样在创建索引(手动创建索引或通过对文档建立索引)时,模板设置将用作创建索引的基础。

模板类型

模板有两种类型:索引模板组件模板

  1. 组件模板是可重用的构建块,用于配置映射,设置和别名;它们不会直接应用于一组索引。
  2. 索引模板是可以包含组件模板的集合,也可以直接指定设置,映射和别名。

索引模板中的优先级

  1. 可组合模板优先于旧模板。如果没有可组合模板匹配给定索引,则旧版模板可能仍匹配并被应用。
  2. 如果使用显式设置创建索引并且该索引也与索引模板匹配,则创建索引请求中的设置将优先于索引模板及其组件模板中指定的设置。
  3. 如果新数据流或索引与多个索引模板匹配,则使用优先级最高的索引模板

内置索引模板

Elasticsearch具有内置索引模板,每个索引模板的优先级为100,适用于以下索引模式:

  1. logs-*-*
  2. metrics-*-*
  3. synthetics-*-*

所以在涉及内建索引模板时,要避免索引模式冲突。文章来源地址https://www.toymoban.com/news/detail-498436.html

案例

创建索引模版
PUT _component_template/component_template1
{
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date"
        }
      }
    }
  }
}

PUT _component_template/runtime_component_template
{
  "template": {
    "mappings": {
      "runtime": { 
        "day_of_week": {
          "type": "keyword",
          "script": {
            "source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ROOT))"
          }
        }
      }
    }
  }
}

  • 创建使用组件模板的索引模板
PUT _index_template/template_1
{
  "index_patterns": ["bar*"],
  "template": {
    "settings": {
      "number_of_shards": 1
    },
    "mappings": {
      "_source": {
        "enabled": true
      },
      "properties": {
        "host_name": {
          "type": "keyword"
        },
        "created_at": {
          "type": "date",
          "format": "EEE MMM dd HH:mm:ss Z yyyy"
        }
      }
    },
    "aliases": {
      "mydata": { }
    }
  },
  "priority": 500,
  "composed_of": ["component_template1", "runtime_component_template"], 
  "version": 3,
  "_meta": {
    "description": "my custom"
  }
}
  • 创建一个匹配bar*的索引bar-test
PUT /bar-test

到了这里,关于ES-索引管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud分布式搜索引擎、数据聚合、ES和MQ的结合使用、ES集群的问题

    目录 数据聚合 聚合的分类 ​编辑 DSL实现Bucket聚合 ​编辑  DSL实现Metrics聚合​编辑 RestAPI实现聚合  对接前端接口​编辑  自定义分词器​编辑 Completion suggester查询 Completion suggester查询 酒店数据自动补全 实现酒店搜索框界面输入框的自动补全  数据同步问题分析​编辑 同

    2024年02月16日
    浏览(49)
  • 搜索引擎——倒排索引

    倒排索引(Inverted Index)是一种用于快速查找文档的数据结构,常用于搜索引擎中。与正向索引(Forward Index)相反,倒排索引是基于单词或术语来组织文档的索引。 倒排索引的核心思想是将每个词条映射到出现该词条的文档列表,而不是将文档映射到词条列表。这样可以实现

    2024年02月12日
    浏览(44)
  • 全文索引搜索引擎Zinc

    什么是 Zinc ? ZincSearch 是一个搜索引擎,可用于文本数据、日志、指标、事件等。它允许您进行全文搜索,包括将服务器日志发送到 ZincSearch 、推送您的应用程序数据、提供全文搜索或在您的应用程序中构建搜索栏。具备与 Elasticsearch API 的兼容性,因此您可以轻松迁移应用程

    2024年02月06日
    浏览(70)
  • 正排索引 vs 倒排索引 - 搜索引擎具体原理

    正排索引是一种索引机制,它将文档或数据记录按照某种特定的顺序进行组织,通常是按照文档ID或者其他唯一的标识符进行排序。这种索引的核心在于,它允许我们通过已知的文档标识符快速访问到对应的文档内容。 在正排索引中,索引的结构通常是这样的: 索引的键是文

    2024年04月14日
    浏览(48)
  • ES搜索引擎入门+最佳实践(九):项目实战(二)--elasticsearch java api 进行数据增删改查

            本篇是这个系列的最后一篇了,在这之前可以先看看前面的内容: ES搜索引擎入门+最佳实践(一)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(二)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(三)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(四)_flame.liu的博客

    2024年02月12日
    浏览(55)
  • 4 深入理解搜索引擎索引与性能调优

    作者:禅与计算机程序设计艺术 在互联网中,信息检索一直是一个重要的课题,其中搜索引擎就是最常用的。搜索引擎的作用不仅是从海量数据中快速获取自己需要的信息,更是一种社会化交流工具,通过用户自然语言的输入,搜索引擎能够自动匹配到最相关的内容并呈现给

    2024年02月08日
    浏览(36)
  • Java SpringBoot API 实现ES(Elasticsearch)搜索引擎的一系列操作(超详细)(模拟数据库操作)

    小编使用的是elasticsearch-7.3.2 基础说明: 启动:进入elasticsearch-7.3.2/bin目录,双击elasticsearch.bat进行启动,当出现一下界面说明,启动成功。也可以访问http://localhost:9200/ 启动ES管理:进入elasticsearch-head-master文件夹,然后进入cmd命令界面,输入npm run start 即可启动。访问http

    2024年02月04日
    浏览(53)
  • 【搜索引擎Solr】Solr:提高批量索引的性能

    几个月前,我致力于提高“完整”索引器的性能。我觉得这种改进足以分享这个故事。完整索引器是 Box 从头开始创建搜索索引的过程,从 hbase 表中读取我们所有的文档并将文档插入到 Solr 索引中。 我们根据 id 对索引文档进行分片,同样的文档 id 也被用作 hbase 表中的 key。

    2024年02月15日
    浏览(45)
  • 【Golang系统开发】搜索引擎(3) 压缩倒排索引表

    假设我们的数据集中有 800000 篇文章,每篇文章有 200 词条,每个词条有6个字符,倒排记录数目是 1 亿。那么如果我们倒排索引表中单单记录文档id,不记录文档内的频率和偏移信息。 那么 文档id 的长度就必须是 l o g 2 800000 = 20 b i t log_2800000=20 bit l o g 2 ​ 800000 = 20 bi t (文档

    2024年02月12日
    浏览(47)
  • 使用Logstash同步mysql数据到Elasticsearch(亲自踩坑)_将mysql中的数据导入es搜索引擎利用logstash(1)

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月28日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包