分布式搜索引擎(一) ES 基础知识

简介: ES 基础知识

ES基础信息

数据分类

我们生活中的数据总体分为两种,结构化数据和非结构化数据

结构化数据:指具有固定格式或者有限长度的数据,如数据库,元数据等

非结构化数据:指不定长或者无固定格式的数据,如邮件,word文档等磁盘上的文件

结构化数据搜索

常见的结构化数据也就是数据库中的数据

再数据库中搜索很容易实现,通常都是使用sql语句来进行查询,而且可以很快的得到查询结果

为什么数据库搜索很容易:因为数据库中的数据是规律的,有行有列而且数据格式,数据长度都是固定的

非结构化数据查询方法

顺序扫描法

在Windows上面搜索包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完为止,例如windows的搜索也可以搜索文件内容,只是相当慢

全文检索(Full-text Search)

用户通过查询索引库---->生成索引----->文档

全文检索是指计算机索引程序通过扫描文件中的每一个词,对每一个词建立一个索引,知名该词再文档中出现的次数和位置,,当用户查询时,检索程序就会根据实现建立的索引进行查找,并将查找结果反馈给用户的检索方案,这个过程类似于通过字典的目录查字的过程

将非结构化数据的一部分信息提取出来,重新组织,使其变得有一定的结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对比较快的目的,这部分从非结构化数据中提取出来的然后重新组织的信息,我们称之为索引

这种先建立索引,然后再对索引进行搜索的过程就叫做全局检索,虽然创建索引的过程也是非常好是的,但是索引一但创建就可以多次使用,全文检索主要处理的是查询,所以耗时间创建,索引是值得的

实现全文检索的方法

可以使用LUcene,来实现全文检索,Lucene是apache下的一个开发源代码的全文检索引擎工具包,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言),Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索功能

lucene入门

Lucene适用的场景

在应用中为数据库中的数据提供全文检索实现

开发独立的搜索引擎服务,系统

Lucene的特性
  1. 稳定,索引性能高

    ​ 每小时能够索引150G以上的数据

    ​ 对内存的要求小,只需要1MB的堆内存

    ​ 增量索引和批量索引一样块

    ​ 索引的大小越为索引文本大小的20%-30%

  2. 高效,准确,高性能的搜索算法

    ​ 良好的搜索排序

    ​ 强大的查询方法支持:短语查询,通配符查询,临近查询,范围查询等

    ​ 支持字段搜索:如标题,作者,内容等

    ​ 可根据任意字段排序

    ​ 支持多个索引查询结果合并

    ​ 支持更新操作和查询操作同时进行

    ​ 支持高亮,join,分组结果功能

    ​ 速度快

    ​ 可拓展排序模块,内置包含向量空间模型,BM25模型可选

    ​ 可配置存储引擎

  3. 跨平台

    ​ 纯java编写

    ​ 作为apache开元许可下的开源项目,可以再商业或者开源项目中使用

    ​ lucene有多钟语言实现版(如C,C++,Python等)不仅仅是java

Lucene索引原理

image-20230509152901960.png

参考文档地址

https://blog.csdn.net/qq_45441466/article/details/120110444

ElasticSearch入门

定义

ElasticSearch简称ES,ES是一个分布式全文搜索引擎,为了解决原生lucene使用的不足,优化Lucene的调用方式,并实现了高可用的分布式集群的搜索方案,ES的索引库管理支持依然是基于Apache Lucene(TM)的开源搜索引擎

ES也是用java开发并使用LUcene所谓其核心来实现所有的索引和搜索功能,他的是通过简单的RESTFul API来隐藏Lucene的复杂性,从而让全文索引变得简单

ES的特点

分布式的近实时文件存储,Mysql是实时的

能在分布式项目/集群中使用

本身支持集群拓展,可以拓展到上百台服务器

处理PB级结构化或者非结构化数据

简单的RestFul Api通信方式

支持各种语言的客户端:java, js

基于Lucene封装,使操作简单

ES中关键字说明

index->type->mapping->document->field

index:Mysql中的一张表

type:一个index中可以有多个Type,每个type的字段都是差不多的,但是有一些略微差别

mapping:一个type有一个mapping,如果说type是一个具体的表,index代表了多个Type同属的一个类型,mapping就是这个type的表结构定义

document:往index中的一个type里面写入一条数据,叫做一条document,一条document就代表了mysql中某个表里的一行数据,

field:每个document有多个Field,每个field就代表了document中的一个字段的值

目录
相关文章
|
3月前
|
自然语言处理 搜索推荐 数据库
高性能分布式搜索引擎Elasticsearch详解
高性能分布式搜索引擎Elasticsearch详解
95 4
高性能分布式搜索引擎Elasticsearch详解
|
2月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
56 1
|
2月前
|
存储 缓存 数据处理
深度解析:Hologres分布式存储引擎设计原理及其优化策略
【10月更文挑战第9天】在大数据时代,数据的规模和复杂性不断增加,这对数据库系统提出了更高的要求。传统的单机数据库难以应对海量数据处理的需求,而分布式数据库通过水平扩展提供了更好的解决方案。阿里云推出的Hologres是一个实时交互式分析服务,它结合了OLAP(在线分析处理)与OLTP(在线事务处理)的优势,能够在大规模数据集上提供低延迟的数据查询能力。本文将深入探讨Hologres分布式存储引擎的设计原理,并介绍一些关键的优化策略。
141 0
|
5月前
|
负载均衡 监控 搜索推荐
面试题ES问题之Solr和Elasticsearch在分布式管理上如何解决
面试题ES问题之Solr和Elasticsearch在分布式管理上如何解决
43 1
|
7月前
|
存储 自然语言处理 搜索推荐
分布式搜索引擎ElasticSearch
Elasticsearch是一款强大的开源搜索引擎,用于快速搜索和数据分析。它在GitHub、电商搜索、百度搜索等场景中广泛应用。Elasticsearch是ELK(Elasticsearch、Logstash、Kibana)技术栈的核心,用于存储、搜索和分析数据。它基于Apache Lucene构建,提供分布式搜索能力。相比其他搜索引擎,如Solr,Elasticsearch更受欢迎。倒排索引是其高效搜索的关键,通过将词条与文档ID关联,实现快速模糊搜索,避免全表扫描。
283 12
|
6月前
|
存储 搜索推荐 Java
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
85 2
|
7月前
|
存储 搜索推荐 Java
Java远程连接本地开源分布式搜索引擎ElasticSearch
Java远程连接本地开源分布式搜索引擎ElasticSearch
|
2月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
18天前
|
存储 NoSQL Java
使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
47 5
|
21天前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
39 8
下一篇
DataWorks