Elasticsearch(简称ES)是一个基于Lucene库的开源、分布式、RESTful搜索引擎。它提供了一个分布式、多租户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速安装及配置简单。
在Elasticsearch中,数据类型是一个核心概念,它们决定了如何存储和索引数据。
Elasticsearch 7.x 版本后,不再显式地支持显式的类型定义,而是使用了一种更加灵活和动态的数据模型。
尽管如此,仍然可以讨论在Elasticsearch中如何管理和使用数据,尤其是在较旧版本中。
一、Elasticsearch数据类型
在Elasticsearch 6.x及之前的版本中,数据类型(Type)是索引中的一个逻辑分区,每个索引可以包含多个类型。这些类型定义了文档的结构和属性。然而,从Elasticsearch 7.x开始,类型被弃用,取而代之的是更加灵活的字段级别的多值、null值和动态类型。
在Elasticsearch 6.x及之前的版本中,定义数据类型时,通常需要指定以下属性:
属性(Properties)
这是数据类型中的字段,每个字段都有一个类型,
一些常见的ES属性:
类型(Type):字段的数据类型,如文本(text)、关键字(keyword)、整数(integer)、浮点数(float)、布尔值(boolean)等。
分析器(Analyzer):用于文本字段的分析器,它决定了字段值如何被分词和索引。
索引(Indexed):布尔值,表示该字段是否应该被索引。默认为true。
存储(Stored):布尔值,表示该字段的值是否应该被单独存储,以便可以单独检索。默认为false。
可搜索(Searchable):布尔值,表示该字段是否可以被搜索。对于keyword类型的字段,这通常是true。
可聚合(Aggregatable):布尔值,表示该字段是否可以被用于聚合操作。
null_value:对于可以被索引的字段,这个设置可以指定一个默认值,当文档中没有该字段的值时使用。
多字段(Multi-fields):允许在同一个字段上定义多个不同的子字段,每个子字段可以有自己的类型和分析器。
字段级别设置(Field-level settings):这些设置包括doc_values、term_vector、ignore_above、index_options等,用于控制字段的索引方式和存储方式。
分析器(Analyzer)
它用于在索引文本字段之前对其进行分析的工具。分析器可以影响搜索查询的匹配方式。
数据类型中字段的详细定义,包括字段名称、类型、分析器等。
二、Elasticsearch数据类型的使用方式
创建索引和类型
在Elasticsearch 6.x及之前的版本中,创建索引和类型通常涉及定义映射,它定义了文档的结构。例如:
PUT /my_index
{
"mappings": {
"my_type": {
"properties": {
"title": {
"type": "text"
},
"content": {
"type": "text",
"analyzer": "standard"
},
"date": {
"type": "date"
}
}
}
}
}
在Elasticsearch 7.x及以后的版本中,虽然不再支持显式的类型定义,但可以通过在文档中设置特定的字段来模拟类型的功能。
一旦定义了索引和映射(或字段),就可以开始向Elasticsearch索引文档了。这通常涉及发送一个POST请求到特定的索引和类型(或直接发送到索引,如果使用的是Elasticsearch 7.x及以后的版本),并附带JSON格式的文档数据。
POST /my_index/my_type/_doc/1
{
"title": "Document Title",
"content": "This is the content of the document...",
"date": "2023-04-01"
}
搜索文档
使用Elasticsearch的查询DSL(领域特定语言),可以对索引中的文档进行搜索。
查询可以非常复杂,包括全文搜索、过滤、聚合等。
GET /my_index/my_type/_search
{
"query": {
"match": {
"title": "Document"
}
}
}
更新和删除文档:
Elasticsearch也支持更新和删除已索引的文档。这可以通过发送PUT或DELETE请求到特定的文档ID来实现。
三、结论
尽管Elasticsearch 7.x及以后的版本对数据类型的处理方式发生了显著变化,但基本概念和用法仍然相似。通过理解Elasticsearch如何存储和索引数据,开发人员可以更好地利用这个强大的搜索引擎来构建高效、可扩展的搜索和数据分析解决方案。
在Elasticsearch 7.x及以后的版本中,对于数据类型的需求通常可以通过灵活的字段配置和强大的查询功能来满足。