首页 > 其他分享 >Elasticsearch

Elasticsearch

时间:2024-03-30 23:34:11浏览次数:10  
标签:index 查询 Lucene 索引 文档 Elasticsearch

Elasticsearch

​ Elasticsearch 是一个基于 Apache Lucene 构建的开源搜索引擎。它提供了一个分布式、多用户能里的全文搜索引擎,基于 RESTful Web 接口。

Kibana

​ Kibana 是一个开源的数据可视化平台,通常与 Elasticsearch 配合使用,用于搜索、分析和可视化数据。虽然 Kinaba 提供了一个图形界面来与 Elasticsearch 交互,但它本身不直接构建索引。索引的创创建通常是通过 Elasticsearch 的API 或这使用 Logstash 这样的数据管道工具来完成的。

​ 但不过,可以在 Kibana 的 Dev Tools 控制台中使用 Elasticsearch 的 API 来创建索引。

Apache Lucene

Apache Lucene 是一个高性能、可扩展的信息检索库,它提供了全文搜索功能,并且是 Elasticsearch 和 Solr 等搜索引擎的基础。
Lucene 的主要特点包括:
  • 高性能:专为速度而设计,能够快速地执行搜索操作。
  • 可扩展性:可运行在各种平台上。
  • 全文搜索:支持全文搜索。
  • 索引和搜索:允许用户创建一个索引,然后可以对这个索引执行索引查询。
  • 灵活性:提供了丰富的 API ,允许开发者自定义搜索逻辑和索引结构,
  • 多语言支持:支持多语言的文本分析
  • 开源:拥有活跃的社区支持。
Lucene 的工作流程通常包括以下几个步骤:

1、文档添加:将文档添加到索引中,文档被分解成单独的字段,每个字段包含一系列的词项。

2、索引构建:Lucene 为每个词项创建一个索引,包括词项在文档中的位置信息。

3、查询处理:用户发起查询时,Lucene 根据查询条件在索引中查找匹配的文档。

4、结果返回:Lucene 返回匹配俄文档列表,通常是按照相关性排序的。

Elasticsearch 具有以下特点:
  1. 分布式和可扩展:Elasticsearch 可以在多台机器上运行,以分布式的方式存储数据,提供高可用性和扩展性。
  2. 实时性:Elasticsearch 能够实时索引和搜索数据,几乎没有延迟。
  3. 多种语言和格式支持:Elasticsearch 支持多种数据格式和语言,能够处理结构化和非结构化数据。
  4. 强大的API:Elasticsearch 提供了丰富的 RESTful API,方便用户进行数据操作和搜索。
  5. 易于使用:Elasticsearch 有着良好的文档和社区支持,使得用户能够相对容易地开始使用和维护。 Elasticsearch 通常与其他软件结合使用,如 Logstash 进行数据收集和处理,Kibana 进行数据可视化,共同构成 ELK Stack(Elasticsearch, Logstash, Kibana),广泛应用于日志分析、安全情报、业务分析等领域。

Elasticsearch 将数据存储在索引中,每个索引由多个分片组成,分片是数据存储和检索的基本单元。

Elasticsearch 数据存储

Elasticsearch 中的数据存储主要涉及一下几个概念:

1、索引(Index):相当于关系数据库中的一个数据库,是逻辑上的概念,由一个或多个分片组成。

2、分片(Shard):物理上的数据单元,每个分片是一个 Lucene 索引,可以分布在集群中的不同节点上。

3、文档(Document):存储在分片中的基本信息单位,相当于关系型数据库中的一行记录。

4、字段(Field):文档的组成部分,每个字段都有数据类型,如 text、date、integer等。

5、倒排索引(Inverted Index):Lucene 使用的数据结构,用于快速全文搜索,它的每个唯一的词映射到包含该词的文档列表。

索引创建与查询(kibana)

# 创建索引
PUT /my_new_index
{
	'settings':{
		'number_of_shards':1,
		'number_of_replicas':0,
	},
	'mappings':{
		'properties':{
			'title':{
				'type':'text'
			},
			'description':{
				'type':'text',
				'fields':{
					'raw':{
						'type':'keyword'
					}
				}
			},
			'date':{
				'type':"date",
				'format':'yyyy-MM-dd HH:mm:ss'
			}
		}
	}
}

以上命令创建了一个名为 my_new_index 的新索引,设置了一个 1 个分片和 0 个副本。同时定义了索引的映射(mappings),包括三个字段:title(标题),description(描述)和 date(日期)。title 和description 字段都被设置为文本类型,其中 description 字段还有一个 raw 子字段,用于精确匹配。date字段被设置为日期类型,并指定了日期格式。

# 查询语法
GET /my_new_index/_search
{
	'query':{
		'match':{
			'title':'Elasticsearch'
		}
	}
}

举一个简单的例子:假设我们有一个博客平台的 Elasticsearch 索引 ,其中包含文章的标题、内容、发布日期等字段。以下是一些查询实例:

# 搜索标题包含特定词汇的文章

GET /blog/_search
{
	'query':{
		'match':{
			'title':'Elasticsearch'
		}
	}
}
# 根据发布日期范围查询文章
GET /blog/_search
{
	'query':{
		'range':{
			'date':{
				'gte':"2021-01-01",
				'lte':'2021-12-31'
			}
		}
	}
}
# 符合查询,同时满足多个条件
GET /blog/_search
{
	'query':{
		'bool':{
			'nust':[
				{'match':{'title':'Elasticsearch'}},
				{'range':{'date':{'gte':'2021-01-01'}}}
			],
			"must_not": [
                { "match": { "tags": "deprecated" }}
             ],
              "should": [
                { "match": { "author": "John Doe" }}
             ],
		}
	}
}

这个查询结合了必须、必须不和应该条件,查找标题包含 "Elasticsearch", 发布日期在2021年,且不包含标签 "deprecated" 的文章,同时优先返回作者为 "John Doe" 的文章。

# 聚合查询
GET /blog/_search
{
	'size':0,
	'aggs':{
		'top_authors':{
			'terms':{
				'field':"author",
				'size':10
			}
		}
	}
}

这个查询不会返回文章,而是返回一个聚合结果,显示最活跃的前10位作者。

数据写入与删除

# 写入文档数据
POST /my_index/_doc/your_custom_id
{
	'field1':"value1",
	'field2':123
}
# 批量写入数据
POST /my_index/_bulk
{'index':{'_id':'1'}}
{'field1':'value1'}
{'index':{'_id':"2"}}
{'field2':{'value2'}}
{'index':{'_id':'3'}}
......
# 删除索引
DELETE /index_name

标签:index,查询,Lucene,索引,文档,Elasticsearch
From: https://www.cnblogs.com/wjx-2005-07-01/p/18106241

相关文章

  • ElasticSearch的监控与优化
    本篇不详写prometheus、grafana的搭建,需要可以翻阅linux监控篇ElasticSearch入门篇一、监控docker-compose.ymlelasticsearch_exporter:#监控image:quay.io/prometheuscommunity/elasticsearch-exporter:v1.3.0command:-'--es.uri=http://elasticsearch:9200'-'......
  • Postgresql同步数据到Elasticsearch
    Postgresql同步数据到es需要借助中间工具连接器,连接器部署主要有两种方式,一种是基于Elastic云托管的连接器(Nativeconnectors),另外一种自己安装管理的连接器(self-managedconnector). 托管方式连接器的使用方法文档:https://www.elastic.co/guide/en/enterprise-search/8.13/......
  • ElasticSearch
    ElasticSearch概述Elasticsearch,简称为es,es是一个开源的高扩展的分布式全文检索引擎,他可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也是用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简......
  • ElasticSearch搜索引擎介绍+性能监控及调优
    ElasticSearch搜索引擎介绍一、概述搜索在现代日常生活场景中都非常常见,如百度、京东、天猫等等。数据量都是庞大的,所以直接基于数据库搜索必定不是他们的首选,在这些场景下,要完成数据的高效搜索,都会基于搜索引擎实现。而对于搜索实现来说,市面上常见三种技术:Lucene、Solr......
  • elasticsearch基础使用
    索引操作mapping映射属性type:字段数据类型,字符串:text(可分词的文本),keyword(精确值,不可以分词的文本)如下图,邮箱就是keyword,名字就是tex数值:long,integer,short,byte,double,float布尔:boolean日期:dateindex:是否创建倒排索引,默认是trueanalyzer:使用哪种分词器properti......
  • Elasticsearch入门及常用命令和Spring中的常用操作
    入门官网简介一个分布式的、Restful风格的搜索引擎。支持对各种类型的数据的检索。搜索速度快,可以提供实时的搜索服务。便于水平扩展,每秒可以处理PB级海量数据。常用术语索引:与MySQL数据库中的Database相对应类型:与MySQL数据库中的Table相对应文档:相当于MySQL中的一......
  • springboot 集成elasticsearch Ik分词
    前提是我们elasticsearch服务已经集成了IK分词,具体集成下载对应的elasticsearchIK分词插件,在es插件包下创建IK文件夹,将下载好的IK包上传上去解压后重启es1、pom引入co.elastic.clientselasticsearch-java7.16.2jakarta.jsonjakarta.json-api2.0.1org.springframew......
  • ElasticSearch的搜索相关操作
    1、基本介绍Elasticsearch的查询是基于JSON风格的DSL(DomainSpecificLanguage)来实现的。常见的查询类型包括:查询所有:查询出所有数据,一般测试用。例如:match_all全文检索(fulltext)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:match、multi_match精确......
  • 二进制部署elasticsearch集群
    部署elasticsearch7.17.3版本背景:  业务有需求看evenet事件,由于etcd集群中的eventkey频繁打到200w+,对etcd集群压力非常大,每次都需要手动删除eventkey,非常耗时间,而且风险特别好,恢复时间慢等缺点。解决方案:  1,拆分etcd集群中的eventkey,在本机上创建一个新的etcd集群,......
  • Elasticsearch 8.x以上实现初始化用户密码,elasticsearch-setup-passwords interactive
    Elasticsearch8.x以上,默认自动开启x-pack验证,在首次启动时,会设置密码,当再次执行elasticsearch-setup-passwordsinteractive就会报错,提示使用elasticsearch-reset-passwords,但是用户太多,还是想要能像8.x以下一直敲回车,设置密码。今天偶然Elasticsearch报错,发现一个方法可以使用,......