elasticsearch 基础

ES 搜索技术历史

今天看的是《Elasticsearch实战与原理解析》 第一章 搜索技术发展史

1、搜索技术发展史

宏观而言,搜索引擎的发展经历了五个尖端和两大分类。五个阶段分别是ftp文件检索阶段、分类目录阶段、文本相关性检索阶段、网页链接分析阶段和用户意图识别阶段。

ftp文件检索阶段:索索引擎质检所多个ftp服务器山存储的文件,用户搜索是需要输入精准的文件名来搜索。搜索引擎会告诉用户从哪一个ftp服务器下载。

分类目录阶段:该阶段搜索引擎是一个导航网站,网站中国都是湾沚的分类陈列,用户在互联网上常用的湾沚在这里都有,到现在,这种类型的网站依旧存在。

文本相关性检索阶段:该阶段引入了全文搜索技术,主要是为了解决网络信息骤增带来的检索到的信息不准。用户将菽粟的查询信息交给搜索引擎后台服务器,搜索引擎服务器通过查询已经素银好的网页,返回一些相关性好的网页信息。

网页链接分析阶段:该阶段的搜索引擎使用的网站链接形式与当前基本相同,在该阶段,外部链接表示推荐。这一阶段的代表是谷歌。目前,网页链接分析算法和改进优化的版本在主流搜索引擎中国大行其道。

用户意图识别阶段:该阶段的搜索引起以用户为中心作为设计的初心,搜索引擎力求理解每一位用户的真正诉求,力求做到千人千面,追求葛新华识别和反馈。这一阶段的代表是百度。

两大分类是:站内搜索和站外搜索。

简单来说,站内搜索就是在一个网站中进行检索,如在京东商城中的搜索某个物品, 推荐出的东西都是在京东商城中出现的;站外搜索一般来说都是在整个生态中的搜索,如 使用百度搜索,他会推荐出相似度较高的某些链接给你。

2、Elasticsearch简介

Elasticsearch是一个分布式、可扩展、近实时的高性能搜索和数据分析引擎。它提供了搜索、分析、存储数据的三个功能 。

其主要特点:分布式、量配置、开箱即用、自动发现、索引分片、索引副本机制、支持restful接口、多数据源、自动索引负载。

它是在lucene的基础上做的封装。

3、lucene简介

lucene是一个免费 、开源、高性能、纯java编写的全文搜索引擎。

其主要特点:

索引文件格式独立于应用平台:定义了一套以8字节为基础的索引文件格式,兼容各个平台、

索引速度快:在传统的全文索引的倒排序索引的基础上,实现了分块索引,能够对新的 文件建立小文件索引,提升索引速度、

简单易学:优秀的面向对象的系统架构,减低了lucene的学习难度、

跨语言:设计了独立于预约和文件格式的文本分析接口,索引器通过接受token留完成索引文件的创立,用户扩展的语言和文件格式,只需要实现文件分析的接口即可、

强大的搜索引擎:lucene默认实现了一套签到的查询引擎,用户无需自己编写代码即可通过文件获得强大的查询能力。lucene实现了布尔操作、模糊查询、分组查询等。

lucene主要模块:

Analysis模块:主要负责词法分析和语言处理。也就是分词通过该模块,最终新城存储或者查询的最小单元term

index模块:索引的创建工作

store模块:负责索引的读写 主要是对文件的一些操作,主要目的是抽象出和平台文件系统无关的存储

QueryParser模块:负责语法分析 把查询语句生成lucene底层识别的条件

Search模块:负责对索引的搜索

Similarily模块:负责相关性打分和排序的实现。

第二章 搜索技术基础知识(一)

数据搜索方式。

搜索引擎主要对数据进行搜索,而在牙发过程中不拿发现数据有两种类型。即结构化和非急死结构化数据。
对软件研发人员来说,在做数据车计划时,对数据的结构化感知会非常强烈。如结构化数据一般我们会放在光起型数据库。这是因为结构化数据有固定的数据格式和有限的。长度,因此可以通过二维化的表格来承载它。

而非结构化数据一般会存在。mongodb中,这是因为非结构化的数据长度不固定且无固定数据格式。显然,在关系型数据库中存储这类数据较为困难。

于数据形态相对应的。数据的搜索分为两种,即结构化数据搜索和非结构化数据搜索。
因为结构化数据可以基于数据库来存储,而关系数据库往往支持索引。因此,结构化数据可以通过关系数据库来完成搜索和查找。通常有数据扫描关键词精准匹配,关键词部分匹配。对于比较复杂的关键词部分匹配通常借助like。来实现。
对于非结构化数据,数据的搜索主要有顺序扫描和全文搜索两种方式,显然对于非结构化数据而言,数据扫描的效率很低的方法,因此全文检索技术应运而生,而全文检索就是宝叔所说的搜索引擎要做的事。
在实现全文检索的过程中,一般都需要提取非结构化数据中的有效信息。重新组织数据的常在结构形式,而搜索数据是。要基于新结构化的数据展开,从而达到提高检索速度的目的。显而易见,全文检索是一种空间换时间的做法,前街进行数据索引的创建。需要花费一定的时间和空间,但能显著提高后期的速度,效率。

搜索引擎的工作原理。

搜索引擎的工作原理分为两个阶段,计网页数据抓取和索引阶段。搜索阶段。其中网页数据抓取和索引阶段包含网络爬虫。数据预处理,数据索引三个主要动作。搜索街道包含搜索关键词。输入内容预处理。搜索关键词查询三个主要动作。

其中网络爬虫用于抓取互联网上的网页。抓取到一个新网页后,还要继续通过该网页中的链接来。抓取其他网页,因此网络爬虫是一个不间歇的工作。一般需要自动化手段来食食。网络爬虫的主要工作就是尽可能快,尽可能全的发现和抓举。互联网上各种网业。

网页网页被网络巴掌抓起后会被存入网页库,已被现阶段进行数据的预处理。需要指出的是网页库里。存储的网页信息与我们在浏览器看到的网页。内容相同。此外,由于互联网上的网页有一定的重复性,因此,把新网页真正插入网页库之前需要进行。查重检查

网页数据预处理的程序不断的从网页库中取出网页进行必要的预处理。常见的预处理动作有除噪声内容,关键词处理,网页间链接关系计算的其中。去除噪声内容包括版权声明,文字导航条广告等。网页经过预处理后会被浓缩长以关键词为核心的内容。

此外,互联网上的内容除了常规的网页外,还有各种类型的文档。多媒体文件的这些内容均需进行相应的数据预处理动作。

数据预处理后进行数据索引。过程。索引过程先后经历正向索引和倒排索引阶段,最终建立索引库,随着新的网页等内容不断的被加入网页库。所以库的更新和维护往往也是增量进行的。
以上就是网页数据抓取和索引阶段的核心工作。下面介绍。检索阶段的核心工作

用户输入的关键词同样会经过预处理,如删除不必要的标点符号,停用词空格。字符串。拼写错误识别的。随后进行相关的风词,风词后,搜索引擎系统向索引库发出索引请求索引库会将。包含索引关键词的新功伟业从索引库中找出来,所以引擎根据索引库返回的内容进行排序处理,最终返回给用户。

http操作es

http操作es

    • ES 搜索技术历史
      • 1、搜索技术发展史
      • 2、Elasticsearch简介
      • 3、lucene简介
    • 第二章 搜索技术基础知识(一)
      • 数据搜索方式。
      • 搜索引擎的工作原理。
    • http操作es
    • 测试es服务
    • 操作索引
      • 创建索引
      • 查看所有索引
      • 查看索引:
      • 删除索引
    • 操作文档
      • 创建文档
        • 未使用自定义的id,不支持put
        • 自定义id
        • 如果是自定义id,可以使用post和put请求,version发生变化。多次提交就是update
      • 查看文档
      • 修改文档
      • 修改单个字段:局部更新
      • 删除文档
      • 删除一个不存在的文档
      • 按照条件删除
    • mappings 设置
    • 查询
      • 1)查询全部
      • 2)匹配查询
      • 3)字段匹配查询
      • 4)关键字精准查询 ,类似于 "="
      • 5)多关键字精准查询
      • 6)查询指定字段
      • 7)过滤字段
      • 8)组合查询
      • 9) 查询范围
      • 10) 模糊查询
      • 11) 单个字段排序
      • 12)多个字段排序
      • 13)高亮显示
      • 14) 分页查询
      • 15) 聚合查询
        • 最大
        • 最小
        • 平均
        • 求和
        • 个数
        • 去重后求和
        • 一下子返回 max min avg count sum
      • 16) 桶聚合查询 分组

测试es服务

在这里插入图片描述

操作索引

创建索引

http://192.168.110.14:9200/shopping
在这里插入图片描述
{
“acknowledged”: true, 响应结果
“shards_acknowledged”: true, 分片结果
“index”: “shopping” 索引名称
}
再次添加相同的索引:报错
在这里插入图片描述

查看所有索引

http://192.168.110.14:9200/_cat/indices?v
在这里插入图片描述

health:当前服务器健康状态:green(集群完整) yellow(单点正常、集群不完整) red(单点不正常)
status:索引打开、关闭状态
index:索引名
uuid:索引统一编号
pri :主分片数量
rep 副本数量
docs.count 可用文档数量
docs.deleted 文档删除状态(逻辑删除)
store.size 主分片和副分片整体占空间大小
pri.store.size 主分片占空间大小

查看索引:

http://192.168.110.14:9200/shopping
在这里插入图片描述

{
“shopping”: { 索引名称
“aliases”: {}, 别名
“mappings”: {}, 映射
“settings”: { 设置
“index”: { 索引
“creation_date”: “1625020090820”, 创建时间
“number_of_shards”: “5”, 主分片数量
“number_of_replicas”: “1”, 副分片数量
“uuid”: “Jnmea8sgRfikz77XlqkHaw”, 索引uuid 唯一性标识
“version”: { 索引版本
“created”: “5060999”
},
“provided_name”: “shopping” 索引名称
}
}
}
}

删除索引

http://192.168.110.14:9200/shopping
在这里插入图片描述
再次删除,索引不存在
在这里插入图片描述

操作文档

创建文档

在这里插入图片描述
{
“_index”: “shopping”,
“_type”: “phone”,
“_id”: “AXpa2or3t0FIJb8Na4mK”,
“_version”: 1,
“result”: “created”,
“_shards”: { 分片
“total”: 2, 总数
“successful”: 1,
“failed”: 0
},
“created”: true
}

未使用自定义的id,不支持put

在这里插入图片描述

自定义id

在这里插入图片描述

如果是自定义id,可以使用post和put请求,version发生变化。多次提交就是update

在这里插入图片描述

查看文档

http://192.168.110.14:9200/shopping/phone/1
在这里插入图片描述
{
“_index”: “shopping”,
“_type”: “phone”,
“_id”: “1”,
“_version”: 6,
“found”: true, 查询结果,true表示找到了,false表示未找到
“_source”: { 文档源信息
“title”: “小米手机222”,
“category”: “小米”,
“images”: “http://www.gulixueyuan.com/xm.jpg”,
“price”: 1999.00
}
}

修改文档

post或者put
在这里插入图片描述

修改单个字段:局部更新

http://192.168.110.14:9200/shopping/phone/1/_update
在这里插入图片描述

删除文档

http://192.168.110.14:9200/shopping/phone/1
在这里插入图片描述

删除一个不存在的文档

在这里插入图片描述

按照条件删除

post
http://192.168.110.14:9200/shopping/_delete_by_query
在这里插入图片描述
{
“took”: 118, 耗时
“timed_out”: false, 是否超时
“total”: 4, 总数
“deleted”: 4, 删除数量
“batches”: 1,
“version_conflicts”: 0,
“noops”: 0,
“retries”: {
“bulk”: 0,
“search”: 0
},
“throttled_millis”: 0,
“requests_per_second”: -1.0,
“throttled_until_millis”: 0,
“failures”: []
}

mappings 设置

使用put请求创建映射
http://192.168.110.14:9200/student/_mapping
{
“properties”:{
“name”:{ – 字段名称
“type”:“text”, – 字段类型
“index”:true
},
“sex”:{
“type”:“text”,
“index”:false
},
“age”:{
“type”:“long”,
“index”:false
}
}
}
1)字段类型 有哪些?
String 字符串类型
text: 可分词
keyword: 关键字 不可分词
Numerical 数值类型
基本类型:byte short int long double float
浮点数的高进度类型:scaled_float
Date 日期类型
Array 数组类型
Object 对象类型

2)定义中的index?
index 表示是否索引。默认是true,该字段会被索引到,能够进行搜索;false 表示不能被搜索到

3)store 是否将数据进行独立存储,默认是false
原始的文本会存储到_source,默认情况下 ,其他提取出来的字段都不是独立存储的,是从_source里面
提取出来的.当然你也可以独立的存储某个字段,只要设置"store":true即可,获取独立存储的字段
要比从_source中解析出来快得多,但是也会占用更多的空间,所以要更具业务需要来设置

4)analyzer: 分词器,这里的ik_max_word 及使用ik分词器

查询

get http://192.168.110.14:9200/shopping/_search

1)查询全部

{"query":{"mach_all":{}}
}

2)匹配查询

{"query":{"mach":{"name":"张三"}}
}

3)字段匹配查询

在多个字段上进行查询

{"query":{"multi_mach":{"name":"张三","fields":["name","nickname"]}}
}

4)关键字精准查询 ,类似于 “=”

{"query":{"trrm":{"name":"张三"}}
}

5)多关键字精准查询

{"query":{"trrms":{"name":["张三","lisi"]}}
}

6)查询指定字段

{"_source":["name","age"]"query":{"trrm":{"name":"张三"}}
}

7)过滤字段

includes 包含
excludes 不包含
{"_source":{"includes":["name","age"],"excludes":["sex"]}"query":{"trrm":{"name":"张三"}}
}

8)组合查询

bool  must must_not should
{"query":{"bool":{"must":{"sex":"男"},"must_not":{"age":"40"},"should":{"name":"张"}}}
}

9) 查询范围

gt 大于>
gte 大于等于>=
lt 小于<
lte 小于等于<=
{"query":{"range":{"age":{"gt":10,"lt":50}}}
}

10) 模糊查询

fuzzy 类似于 like
fuzziness 指定距离

{"query":{"fuzzy":{"name":"si","fuzziness":2},}
}

11) 单个字段排序

{"query":{"mach":{"name":"张三"}},"sort":["age":{"order":desc}]
}

12)多个字段排序

{"query":{"mach_all":{}},"sort":["age":{"order":desc},"_source":{"order":desc}]
}

13)高亮显示

{"query":{"mach_all":{}},"highlight":{"pre_tags": "<font color='red'>","post_tags":"</font>""fields":{"name":{}}}
}

14) 分页查询

{"query":{"mach_all":{}},"sort":["age":{"order":desc}],"from":0"size":5
}

15) 聚合查询

最大

{"aggs":{"max_age":{"max":{"fields":"age"}}},"size":0
}

最小

{"aggs":{"min_age":{"min":{"fields":"age"}}},"size":0
}

平均

{"aggs":{"avg_age":{"avg":{"fields":"age"}}},"size":0
}

求和

{"aggs":{"sum_age":{"sum":{"fields":"age"}}},"size":0
}

个数

{"aggs":{"sum_age":{"sum":{"fields":"age"}}},"size":0
}

去重后求和

{"aggs":{"distinct_age":{"cardinality":{"fields":"age"}}},"size":0
}

一下子返回 max min avg count sum

{"aggs":{"seats_age":{"seats":{"fields":"age"}}},"size":0
}

16) 桶聚合查询 分组

{"aggs":{"age_groupby":{"terms":{"fields":"age"}}},"size":0
}

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

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

相关文章

nodejs+vue+elementui健康饮食美食菜谱分享网站系统

本系统采用了nodejs语言的vue框架&#xff0c;数据采用MySQL数据库进行存储。结合B/S结构进行开发设计&#xff0c;功能强大&#xff0c;界面化操作便于上手。本系统具有良好的易用性和安全性&#xff0c;系统功能齐全&#xff0c;可以满足饮食分享管理的相关工作。 语言 node.…

SpringBoot06---前端路由VueRouter

单页面应用&#xff0c;意思是只有一个html&#xff0c;变化的内容是不同组件进行切换&#xff0c;每个组件加载网络请求&#xff0c;渲染对应的数据&#xff0c;这个内容就是学习怎么完成组件切换 以网易云音乐为例&#xff1a; 网易云音乐 (163.com) 现在无需注册&#xf…

分类预测 | Matlab实现基于TSOA-CNN-GRU-Attention的数据分类预测

分类预测 | Matlab实现基于TSOA-CNN-GRU-Attention的数据分类预测 目录 分类预测 | Matlab实现基于TSOA-CNN-GRU-Attention的数据分类预测效果一览基本介绍研究内容程序设计参考资料 效果一览 基本介绍 Matlab实现分类预测 | Matlab实现基于TSOA-CNN-GRU-Attention的数据分类预…

String为什么设计成不可变的?

为什么要把 String 设计成不可变的呢&#xff1f;有什么好处呢&#xff1f; 这个问题&#xff0c;困扰过很多人&#xff0c;甚至有人直接问过 Java 的创始人 James Gosling。 在一次采访中 James Gosling 被问到什么时候应该使用不可变变量&#xff0c;他给出的回答是&#xff…

MySQL分表实现上百万上千万记录分布存储的批量查询设计模式

我们知道可以将一个海量记录的 MySQL 大表根据主键、时间字段&#xff0c;条件字段等分成若干个表甚至保存在若干服务器中。唯一的问题就是跨服务器批量查询麻烦&#xff0c;只能通过应用程序来解决。谈谈在Java中的解决思路。其他语言原理类似。这里说的分表不是 MySQL 5.1 的…

[C++ 网络协议编程] TCP/IP协议

目录 1. TCP/IP协议栈 2. TCP原理 2.1 TCP套接字中的I/O缓冲 2.2 TCP工作原理 2.2.1 三次握手&#xff08;连接&#xff09; 2.2.2 与对方主机的数据交换 2.2.3 四次握手&#xff08;断开与套接字的连接&#xff09; TCP&#xff08;Transmission Control Protocol传输控…

数据结构【第4章】——栈与队列

队列是只允许在一端进行插入操作、而在另-端进行删除操作的线性表。 栈 栈与队列&#xff1a;栈是限定仅在表尾进行插入和删除操作的线性表。 我们把允许插入和删除的一端称为栈顶&#xff08;top&#xff09;&#xff0c;另一端称为栈底&#xff08;bottom&#xff09;&…

yo!这里是STL::list类简单模拟实现

目录 前言 重要接口实现 框架 默认成员函数 迭代器&#xff08;重点&#xff09; 1.引言 2.list迭代器类实现 3.list类中调用实现 增删查改 后记 前言 我们知道&#xff0c;stl中的vector对应数据结构中的顺序表&#xff0c;string类对应字符串&#xff0c;而今天要…

vue3 excel 导出功能

1.安装 xlsx 库 npm install xlsx2.创建导出函数 src/utils/excelUtils.js import * as XLSX from xlsx;const exportToExcel (fileName, datas, sheetNames) > {// 创建工作簿const wb XLSX.utils.book_new()for (let i 0; i < datas.length; i) {let data datas…

【腾讯云 Cloud Studio 实战训练营】使用 Cloud Studio 快速构建 Vue + Vite 完成律师 H5 页面

【腾讯云 Cloud Studio 实战训练营】使用 Cloud Studio 快速构建 Vue Vite 完成律师 H5 页面 前言一、基本介绍1.应用场景2.产品优势 二、准备工作1.注册 Cloud Studio2.进入 Vue 预置开发环境 三、使用 Cloud Studio 快速构建 Vue Vite 完成律师 H5 页面1.安装相关依赖包2.主…

Spring Boot2.xx开启监控 Actuator

spring boot actuator介绍 Spring Boot包含许多其他功能&#xff0c;可帮助您在将应用程序推送到生产环境时监视和管理应用程序。 您可以选择使用HTTP端点或JMX来管理和监视应用程序。 审核&#xff0c;运行状况和指标收集也可以自动应用于您的应用程序。 总之Spring Boot Ac…

【Transformer】自注意力机制Self-Attention | 各种网络归一化Normalization

1. Transformer 由来 & 特点 1.1 从NLP领域内诞生 "Transformer"是一种深度学习模型&#xff0c;首次在"Attention is All You Need"这篇论文中被提出&#xff0c;已经成为自然语言处理&#xff08;NLP&#xff09;领域的重要基石。这是因为Transfor…

【APITable】教程:创建并运行一个自建小程序

1.进入APITable&#xff0c;在想要创建小程序的看板页面点击右上角的【小程序】&#xff0c;进入小程序编辑页面。 2.创建一个新的小程序区。 点击【 添加小程序】 点击创建小程序&#xff0c;选择模板&#xff0c;输入名字。 3.确定后进入小程序部署引导页面。 4.打开Xshell 7…

201、仿真-基于51单片机PT100测温设计铂电阻温度计设计Proteus仿真(程序+Proteus仿真+原理图+流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、设计功能 二、Proteus仿真图 三、原理图 四、程序源码 资料包括&#xff1a; 方案选择 单片机的选择 方案一&#xff1a;STM32系列单片机控制&#xff0c;该型号单片机为LQFP44封装&#xff0c;内部资源足够用于本次设…

【vue+el-table+el-backtop】表格结合返回顶部使用,loading局部加载

效果图: 一. 表格结合返回顶部 二. 局部loading 解决方法: 一 返回顶部 target绑定滚动dom的父元素类名就可以了. 1.如果你的表格是 固定表头 的,那滚动dom的父元素类名就是 el-table__body-wrapper <el-backtop target".el-table__body-wrapper" :visibility…

项目介绍:《WeTalk》网页聊天室 — Spring Boot、MyBatis、MySQL和WebSocket的奇妙融合

目录 引言&#xff1a; 前言&#xff1a; 技术栈&#xff1a; 主要功能&#xff1a; 功能详解&#xff1a; 1. 用户注册与登录&#xff1a; 2. 添加好友 3. 实时聊天 4. 消息未读 5. 删除聊天记录 6. 删除好友 未来展望&#xff1a; 项目地址&#xff1a; 结语&am…

zookeeperAPI操作与写数据原理

要执行API操作需要在idea中创建maven项目 &#xff08;改成自己的阿里仓库&#xff09;导入特定依赖 添加日志文件 上边操作做成后就可以进行一些API的实现了 目录 导入maven依赖&#xff1a; 创建日志文件&#xff1a; 创建API客户端&#xff1a; &#xff08;1&#xff09…

阿里云服务器安装部署Docker使用教程

本文阿里云百科分享如何在云服务ECS实例上&#xff0c;部署并使用Docker。Docker是一款开源的应用容器引擎&#xff0c;具有可移植性、可扩展性、高安全性和可管理性等优势。开发者可将应用程序和依赖项打包到一个可移植的容器中&#xff0c;快速发布到Linux机器上并实现虚拟化…

学习51单片机怎么开始?

学习的过程不总是先打好基础&#xff0c;然后再盖上层建筑&#xff0c;尤其是实践性的、工程性很强的东西。如果你一定要先全面打好基础&#xff0c;再学习单片机&#xff0c;我觉得你一定学不好&#xff0c;因为你的基础永远打不好&#xff0c;因为基础太庞大了&#xff0c;基…

许多智能算法并不智能(续)

许多智能算法被认为并不智能&#xff0c;主要是因为它们在某些方面仍然存在一些限制。以下是一些常见的原因&#xff1a; 缺乏常识和理解能力&#xff1a;当前的智能算法主要依赖于大量的数据和模式识别来做出决策&#xff0c;但它们通常缺乏对世界的常识和深层理解。这意味着它…