分布式搜索引擎Elasticsearch

一、Elasticsearch介绍

1.Elasticsearch产生背景

  • 大数据量的检索
  • NoSql: not only sql,泛指非关系型的数据库
  • Nginx的7层负载均衡和4层负载均衡

2.Elasticsearch是什么
一个基于Lucene的分布式搜索和分析引擎,一个开源的高扩展的分布式全文检索引擎
Elasticsearch使用Java开发:需安装jdk

Apache:

  • 公司:开源协议
    在它的条款下开源
    很多主流的开源软件都捐献给Apache,让它维护
    顶级开源项目:Kafka,ES,Echarts

  • Apache服务器:Web服务器(Nginx)
    是当前流行的企业级搜索引擎:稳定可靠,企业里普遍使用
    使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,使得全文检索变得简单

Lucene与Elasticsearch关系:

  • Lucene是个库,只能Java使用,并且复杂
  • Elasticsearch,使用Restful操作

Elasticsearch与solr:

  • mysql和oracle的关系
    都是分布式的搜索引擎,不是一个软件,核心本质一样
  • solr基于Lucene
  • es集成度高,solr需要更多插件支持
  • Solr是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用

3.核心概念
集群:多太ES服务器的配合使用的集合称为集群。
节点:形成集群的每个服务器称为节点。
在这里插入图片描述
Shard:分片,数据可以分为较小的分片。每个分片放到不同的服务器上。
Replia:副本,为提高查询吞吐量或实现高可用性,副本是一个分片的精确复制,每个分片可以有零个或多个副本。
全文检索:在一篇文档中搜索要的内容,如果想查的数据快,肯定不是基于mysql的那种索引方式—基于倒排索引,实现的全文检索。

4.ES与关系型数据库Mysql对比

MysqlES
数据库索引
类型
文档
建表语句映射

在这里插入图片描述

5.物理设计
一个集群包含至少一个节点,而一个节点就是一个elasticsearch进程。节点内可以有多个索引。
默认的,如果你创建一个索引,那么这个索引将会有5个分片(primary shard,又称主分片)构成,而每个分片又有一个副本(replica shard,又称复制分片),这样,就有了10个分片。

6.ELK是什么
是日志收集和分析系统。

ELK=elasticsearch+Logstash+kibana
elasticsearch:后台分布式存储以及全文检索
logstash: 日志加工、“搬运工”
kibana:数据可视化展示

ELK架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链。 三者相互配合,取长补短,共同完成分布式大数据处理工作。

7.业务场景

  • 搜索功能
  • ES来替代传统的NoSQL,它的横向扩展机制太方便了

8.Elasticsearch索引到底能处理多大数据
一个Lucene索引,不能处理多于21亿篇文档,或者多于2740亿的唯一词条
一个分片是一个lucene索引,一个es索引默认5个分片

二、Elasticsearch安装

ES安装:
安装jdk(java开发的)---->官网下载,解压---->启动即可(bin目录下bat文件)
在浏览器输入:http://127.0.0.1:9200/

ES客户端安装:
1.restful接口---->直接使用浏览器就可以访问

2.官方没有提供一个特别好的客户端

  • postman
  • elasticsearch-head(第三方,node写的:node环境)
# 安装
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
# 启动
npm run start

配置跨域:修改es的配置

http.cors.enabled: true
http.cors.allow-origin: "*"

浏览器输入:http://localhost:9100/

  • Kibana(官方提供的)
    ES和Kibana版本要严格对应
    官网下载,解压即可
    修改配置—>连接es的地址:
server.port: 5601
server.host: "127.0.0.1"
server.name: lqz
elasticsearch.hosts: ["http://localhost:9200/"]

bin路径下启动kibana
浏览器访问:http://localhost:5601

三、倒排索引

由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而成为倒排索引。
反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
对文章内容进行分词,根据分词建立索引(出现的位置和出现的次数)。

四、索引操作

索引等同于mysql中的数据库

  • 在5.x(包含)之前,一个索引下可以建立多个映射(表)
  • 6.x后,一个索引下只能建立一个映射(表),之前5.x的查询还能用
  • 7.x后,一个索引下完全只支持一个映射

haystack:django的app,实现全文检索

  • 底层可以基于 whoosh(python写的,类似于sqlite,文档型的),ES(Java,类似于Mysql,互联网公司用的多),solr(Java,类似于Oracle,传统企业用)
  • 年久失修,只支持es 2.x版本
  • 咱们做全文检索,基于es,自己通过python操作

配置信息增删改查:

# 增
PUT lqz2
{"settings": {"index":{"number_of_shards":5,"number_of_replicas":1}}
}# 删
DELETE lqz# 查 
# 获取lqz2索引的配置信息
GET lqz2/_settings
#获取所有索引的配置信息
GET _all/_settings
# 同上
GET _settings
# 获取lqz和lqz2索引的配置信息
GET lqz,lqz2/_settings# 改(一般不改)
PUT lqz/_settings
{"number_of_replicas": 1
}

五、映射管理

在Elasticsearch 6.0.0或更高版本中创建的索引只包含一个mapping type。
在5.x中使用multiple mapping types创建的索引将继续像以前一样在Elasticsearch 6.x中运行。
Mapping types将在Elasticsearch 7.0.0中完全删除。

在创建索引的时候,可以预先定义字段的类型及相关属性,如果没有设置,es会自动设置。

Mapping是我们自己定义的字段数据类型,同时告诉es如何索引数据及是否可以被搜索。
作用:会让索引建立的更加细致和完善

字段及类型:

  • 字符串类型:text(会分词),keyword(不会分词)
  • 数字类型:long,integer,short,byte double,float
  • 日期类型:data
  • 布尔类型:boolean
  • binary类型:binary
  • 复杂类型:object(实体,对象),nested(列表)
  • geo类型:geo-point,geo-shape(地理位置)----redis中
  • 专业类型:ip,competion(搜索建议)

建立映射:

PUT books
{"mappings": {"properties":{"title":{"type":"text"},"price":{"type":"integer"},"addr":{"type":"keyword"},"company":{"properties":{"name":{"type":"text"}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/89789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宿主机如何获取kvm虚拟机的ip地址

Can I determine the current IP from a known MAC Address? 参考 https://stackoverflow.com/questions/13552881/can-i-determine-the-current-ip-from-a-known-mac-address 最佳实践,通过nmap扫描来获取局域网中所有存活的ip,然后向每个ip发送一次p…

RNN模型与NLP应用(1/9):数据处理基础Data Processing Basics

文章目录 处理分类特征把分类特征转化为数值特征应用one-hot编码indice要从1开始而不能从0开始数据处理为什么使用one-hot向量 处理文本数据Step1:将文本分割成单词Step2:计算单词的频度按频度递减的方式排序 Step3:One-Hot编码 处理分类特征…

Stm32_标准库_GPIOA初始化

代码: #include "stm32f10x.h" // Device headerGPIO_InitTypeDef GPIO_InitStructur;//定义变量结构体int main(void){/*使用RCC开启GPIO的时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启PA端口时钟/*使用GPIO_I…

黑马VUE3视频笔记

目录 一、使用create-vue创建项目 二、setup选项 三、reactive和ref函数 1.reactive() 2.ref() 三、computed 四、watch ​五、生命周期函数 六、父传子、子传父 父传子defineProps 子传父defineEmits 七、模板引用 ref defineExpose 八、跨层传递普通数据 prov…

JAXB(Java Architecture for XML Binding)下载、使用

简介 JAXB(Java Architecture for XML Binding)就是XML数据绑定的java架构。JAXB可以根据XML Schema生成java类,也能根据java类生成XML Schema,能将XML数据unmarshall到Java内容树,也能将Java内容树持久化为XML数据。…

【煤矿虚拟仿真体验】VR采煤机技能培训有效提高训练效果

在我们的社会中,能源是至关重要的。它是推动我们日常生活和工作的主要动力。然而,我们在获取这种能源的过程中,也带来了许多环境问题。煤矿开采是其中的一个重要部分,因此我们需要寻找更环保、更安全的方式来进行煤矿开采。VR&…

手把手教你用 Milvus 和 Towhee 搭建一个 AI 聊天机器人

作为向量数据库的佼佼者,Milvus 适用于各种需要借助高效和可扩展向量搜索功能的 AI 应用。 举个例子,如果想要搭建一个聊天机器人,Milvus 一定是其进行数据管理的首选。那么,如何让这个应用程序开发变得易于管理及更好理解&#x…

LeetCode算法二叉树—222. 完全二叉树的节点个数

目录 222. 完全二叉树的节点个数 - 力扣(LeetCode) 代码: 运行结果: 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能…

2023-09-28 monetdb-db,schema,user,role-分析

摘要: 对moentdb的database,schema,user,role和权限做分析, 以与mysql中的概念做对比分析. 备份: https://stoneatom.yuque.com/staff-ft8n1u/qfqtnb/gfqc62fozh0qsyqm 上下文相关: 2023-09-28 mysql-代号m-schema调研-文档记录-CSDN博客 2023-09-28 monetdb-databae的概念和…

前后缀分解

42. 接雨水 前后缀分解 class Solution {public int trap(int[] height) {int n = height.length;int[

湖南软件测评公司简析:软件功能测试和非功能测试的联系和区别

一、软件功能测试   软件功能测试旨在验证软件是否按照需求规格说明书的要求正常工作。具体而言,功能测试会对软件的所有功能进行测试,以确保其满足用户的需求和预期。在进行功能测试时,根据需求规格说明书编写测试用例,并在测试…

时序预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现POA-CNN-BiLSTM鹈鹕算…

【CMake】find_package 命令

【find_package】基本调用形式 find_package(<PackageName> [version] [EXACT] [QUIET] [MODULE][REQUIRED] [[COMPONENTS] [components...]][OPTIONAL_COMPONENTS components...][NO_POLICY_SCOPE])例如 find_package(fastcdr REQUIRED) find_package(fastrtps REQUIR…

ad18学习笔记十一:显示和隐藏网络、铺铜

如何显示和隐藏网络&#xff1f; Altium Designer--如何快速查看PCB网络布线_ad原理图查看某一网络的走线_辉_0527的博客-CSDN博客 AD19(Altium Designer)如何显示和隐藏网络 如何显示和隐藏铺铜&#xff1f; Altium Designer 20在PCB中显示或隐藏每层铺铜-百度经验 AD打开与…

优化Python开发环境的几个神技巧

用Python编代码体验极佳&#xff0c;并且随着新版本的发布越来越好&#xff01; 对于很多人而言&#xff0c;Python提供的大量免费函数库、高可读性的程序和新引入的类型注释让很多爱不释手。 然而&#xff0c;数据科学家特别容易使自己的Jupyter notebook变得庞大而杂乱&…

探索useCallback、useMemo、useContext原理

您好&#xff0c;如果喜欢我的文章&#xff0c;可以关注我的公众号「量子前端」&#xff0c;将不定期关注推送前端好文~ useCallback & useMemo 介绍 useCallback和useMemo原理类似&#xff0c;只是入参有所不同。 useCallback缓存的是回调函数&#xff0c;如果依赖项没…

MinGW、GCC、GNU和MSVC是什么?有什么区别?

在C和C开发中&#xff0c;常常会遇到MinGW、GCC、GNU和MSVC这些术语。本教程将向您解释它们的含义以及它们之间的区别&#xff0c;帮助您更好地理解这些常见的编译工具和开发环境。 MinGW&#xff08;Minimalist GNU for Windows&#xff09;&#xff1a; MinGW是一个开源的软件…

计算机里的神灵(SCIP)

计算机程序的构造和解释 我找到计算机里的神灵了&#xff0c;开心一刻 下面是从MIT官网下载的 SCIP求值器&#xff08;解释器&#xff09;的代码&#xff0c;这个官网是个宝藏库 还有其他视频课程和 SCIP的问题答案和可运行代码 链接&#xff1a;https://ocw.mit.edu/courses/6…

力扣-349.两个数组的交集

Idea 使用两个哈希集合&#xff0c;其中一个用来存储第一个数组&#xff0c;第二个来存储两个数组的交集&#xff0c;因为集合自带去重功能&#xff0c;因此最后用数组来接收就好了 AC Code class Solution { public:vector<int> intersection(vector<int>& n…

axios全局路由拦截的设置方法

一个项目中如果http请求发生了错误/异常&#xff0c;比如返回码4xx&#xff08;表示没有授权&#xff0c;登录过期等&#xff09;&#xff0c;我们希望能够在axios在第一时间就能拦截获取到&#xff0c;然后直接提示报错的错误信息&#xff0c;而不是在发起请求的地方&#xff…