elasticsearch
darkness0604
这个作者很懒,什么都没留下…
展开
-
ES搭建篇03-ES集群环境搭建
注意:集群ES为了集群的稳定性,应该尽量确保master节点与数据节点进行分离,即master节点不作为存储数据的节点。操作节点集群环境搭建环境的搭建和之前单机的一模一样,只不过配置有所不同,因此只需要把一台机器上的es分发到其他节点,然后更改elasticsearch.yml中的关键配置即可。分发节点这里在4台机器已经互相配置了SSH免密登录的基础上。scp -r elasticsearch-7.8.0 node02:`pwd`scp -r elasticsearch-7.8.0 nod原创 2020-08-16 15:44:29 · 349 阅读 · 0 评论 -
ES搭建篇02-ES配置详解
内容来自es conf中的elasticsearch.yml文件:es有两种模式,开发模式和生产模式。当修改了除Cluster部分和Node部分的配置之后,ES会检测认为开启了生产模式,此时会对ES启动时进行N多项的配置引导检查。# ======================== Elasticsearch Configuration =========================## NOTE: Elasticsearch comes with reasonable defaults fo原创 2020-08-16 15:41:19 · 444 阅读 · 0 评论 -
ES搭建篇01-es单机环境搭建
从今天开始,开始学习ELK~~进入官网,下载es:https://www.elastic.co/cn/downloads/elasticsearch解压:mkdir /opt/bigdata/estar -xvf elasticsearch-7.6.2-linux-x86_64.tar.gz -C /opt/bigdata/es移动到es目录中,移动到config目录下编辑elasticsearch.yml文件:vi elasticsearch.yml修改内容:network.hos原创 2020-08-16 15:39:54 · 565 阅读 · 0 评论 -
ES第十五天-API笔记
API client有high level 和 low level。Sniffer嗅探器嗅探器, 可以自动间隔探测集群的节点情况并动态更新java es client中的承载节点。 要基于low level进行创建① 概念:从运行中的Elasticsearch集群自动发现节点并将它们设置为现有RestClient实例。RestClient:low实例② 版本: ES 5.0.0-alpha4发布Elasticsearch 2.x及更高版本(2.X~current version)旧版本:c原创 2020-08-16 15:33:16 · 333 阅读 · 1 评论 -
ES第十四天-相关度评分原理
在es中,所有的查询最终都会被转化成bool查询,图上的两种写法的最终效果是一模一样的,match的默认操作符就是or,将转换成bool中的should。如果变成and,则将相当于bool中的must了。此外,其实我们可以针对should中的某一个子句,进行boost的权重设置:TF-IDF① TF(词频term frequency): 关键词在每个doc中出现的次数② IDF(反文档词频inversed document frequency):关键词在整个索引中出现的次数③ norm:字段长.原创 2020-08-16 15:29:31 · 691 阅读 · 0 评论 -
ES第十三天-扩展查询-前缀匹配、通配符查询、正则查询、模糊匹配、句子前缀匹配
前言ES的无论什么搜索,对于text类型字段其实都是基于倒排索引去进行搜索的,也就是进行分词后的,因此如果想像传统数据库一样的模糊匹配,一般可以使用它的keyword进行搜索。(keyword不会被分词)以下的搜索在大型生产环境都不推荐使用。前缀索引查询以xx开头的搜索,不计算相关度评分,和filter比,没有bitcache。前缀搜索,尽量把前缀长度设置的更长,性能差,一般大规模产品不使用。(是去倒排索引中去匹配前缀,需要遍历每一个倒排索引才能找到所有匹配的)语法GET index/_sear原创 2020-08-16 15:26:51 · 6520 阅读 · 1 评论 -
ES第十二天-ES写入原理
1、用户发出写入数据请求,写到内存Buffer中。内存Buffer会将写入的数据操作记录在translog中防止机器奔溃数据丢失。2、内存Buffer每隔一个周期会将内存Buffer中的数据生成一个index segment file(它记录了被删除了的文件),segment本身就是一个文件,从内存buffer写入到segment的过程就是一个写文件的过程。 操作系统层面对新生成的文件不会马上持久化到磁盘,而是写入到OS Cache中,这个写入是通过refresh操作写进去的,refresh的过程除了在.原创 2020-07-26 15:33:50 · 343 阅读 · 0 评论 -
ES第十一天-script
ES Scripts简介在ES 1.4.X-5.0版本,Groovy是作为ES的脚本语言。其他支持脚本:① expression:每个文档的开销较低:表达式的作用更多,可以非常快速地执行,甚至比编写native脚本还要快,支持javascript语法的子集:单个表达式。缺点:只能访问数字,布尔值,日期和geo_point字段,存储的字段不可用② mustache:提供模板参数化查询③ java在ES6之后,更多的是使用Painless作为脚本。Painless:Painless是一种专门用于E原创 2020-07-26 15:31:56 · 2455 阅读 · 0 评论 -
ES第十天-索引原理那些事
倒排索引和正排索引https://www.cnblogs.com/AndyStudy/p/9042032.html倒排索引倒排索引,就是把一个文档中的某个字段的内容进行分词,然后将这些分词去重唯一的形成一个列表,且每个分词都会记录着它所出现在的文档id号, 这样就会大大提高我们的查询效率正排索引正排索引和倒排索引恰恰相反,它记录的是每个doc中分别都有哪些分词,并且每个分词出现的次数。 这非常有利于我们做聚合查询。那聚合查询倒排索引不行吗?举个例子,如果需要统计“abc def” 的原创 2020-07-26 15:25:27 · 167 阅读 · 0 评论 -
ES第九天-分词,自定义分析器,中文分词器ik与基于中文分词器ik的全文检索
什么是分词?分词就是指将一个文本转化成一系列单词的过程,也叫文本分析,在Elasticsearch中称之为Analysis。举例:我是中国人 --> 我/是/中国人什么是分词器?1、顾名思义,分词器就是用来分词的(好像废话。2、除此之外,有时候感叹语言的博大精深,一种东西有许多种叫法,就从英文来说,monther,mum dady father 这种同义词,其实我们是期望用户不管是输入的哪个叫法,我们都可以给它匹配到,这,也就是分词器会做的一部分的工作,也就是语义同化,整体就是为了提高原创 2020-07-26 15:23:02 · 629 阅读 · 1 评论 -
ES第八天-mapping
es对于每个文档,每个字段都存在数据结构的映射关系的,那这个关系怎么查看呢?在老版中,查询mapping:GET /索引名称/_mapping/类型名称在ES6一个索引只允许一种type,ES7更是弱化了type的概念,官方更是提出在ES8将会移除。。因此,现在的mapping查询,一般这么查:GET /索引名称/_mappings查询product索引的映射:GET /product/_mappings{ "product" : { "mappings" : {原创 2020-07-08 13:53:56 · 266 阅读 · 0 评论 -
ES第七天-filter缓存原理
ES本身的数据就是使用倒排索引进行存储的,当查询来临时一一去eq倒排索引,然后直接得到所在的文档,这个过程本身就比mysql的like要快的多了。那filter的缓存是怎么做的呢?在进行若干次filter查询时,filter会维护一个二进制数组来保存查询的各个分词的在文档的匹配结果:0为未匹配上,1为匹上了,下次无需再通过倒排索引,直接通过关键词分词去得到匹配的文档就可以了,快上加快!且filter会优先过滤那些稀疏的数据(基本全是0的那些)。...原创 2020-07-08 13:44:52 · 1114 阅读 · 1 评论 -
ES第六天-深度分页和scroll search
深度分页(Deep paging)我们由前面知道,ES的数据是分片进行存储的,整体数据会被分布在不同的Primary分片上面,因此,如果一次比较深度的分页且排序的操作,成本将会比较大:假如用户要查询5001-5050条数据,按照价格由低到高进行排序,那么ES的查询会发生什么?因为数据是分片存储,因此需要每个分片都拿出自身的前5050条,然后整体排序后,取出5001-5050的数据,然后把无用的数据丢弃掉。这个成本随着数据量的增加将难以预估!因此建议:1、当你的数据超过1W,不要使用深度分页2、原创 2020-07-08 13:43:14 · 394 阅读 · 0 评论 -
ES第五天-查询语法
ES查询超时机制_search后面指定超时:GET /_search?timeout=1sES中的查询从es7开始就已经不建议使用type的概念,es8更是直接移除了type的概念,因此查询路径中我们之后都不带中间的type了。。Query_String查询全部product索引,有数据:GET /product/_search{ "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "su原创 2020-07-04 23:40:21 · 1481 阅读 · 0 评论 -
ES第四天-简单CRUD
创建索引PUT /索引名称?pretty查询索引GET _cat/indices?v删除索引DELETE /索引名称?pretty插入数据语法格式:POST/index名称/type名称/id值{ Json数据}id值可以不进行指定,如果不指定,将生成一个随机字符串的idps:当然,在es7中,弱化了type的概念,因此统一都用“_doc”的type进行表示例子:创建product索引下,若干条记录POST/product/_doc/1{ "name"原创 2020-06-23 13:46:12 · 199 阅读 · 0 评论 -
ES-cat相关命令
/_cat/allocation #查看单节点的shard分配整体情况/_cat/shards #查看各shard的详细情况/_cat/shards/{index} #查看指定分片的详细情况/_cat/master #查看master节点信息/_cat/nodes #查看所有节点信息/_cat/indices #查看集群中所有index的详细信息/_cat/indices/{index} #原创 2020-06-23 13:37:46 · 2525 阅读 · 0 评论 -
ES-HEAD插件安装
1、安装依赖:node和grunt(1) 下载node:① 下载地址:https://nodejs.org/en/download/② 检查是否安装成功:Win+R CMD输入“node -v”命令检查,如果输出了版本号,则node安装成功。(2) 安装grunt:① CMD中执行“npm install -g grunt-cli”命令等待安装完成② 输入:grunt -version命令检查是否安装成功2、下载Head插件(1) 下载地址:https:原创 2020-06-23 13:34:44 · 257 阅读 · 0 评论 -
ES第三天-安装与集群健康
安装环境(1) 安装ES① JDK->依赖,ES基于java编写的,需要有JDK依赖② 下载->https://www.elastic.co/cn/downloads/elasticsearch③ 启动->./elasticsearch -d④ 验证->http://localhost:9200/小坑:如果你启动成功es后,发现无权限进行添加新数据,并且控制台有打印对你磁盘百分比的相关警告,这说明你目前的磁盘可用不足5%,ES会启动只读模式。解决可参原创 2020-06-23 11:58:05 · 214 阅读 · 0 评论 -
ES第二天-ES NODE、高可用,容错机制与Master选举
ES-node首先,一个Elasticsearch集群(下面简称ES集群)是由许多节点(Node)构成的,Node可以有不同的类型,通过以下配置,可以产生四种不同类型的Node,观察elasticsearch.yml文件:#是否有竞选master的资格node.master:true/false#是否作为存储数据节点node.data:true/falsenode.master = true node.data = true这是ES节点默认配置,既作为候选节点又作为数据节点,原创 2020-05-31 20:34:58 · 1704 阅读 · 3 评论 -
ES第一天-大纲与基本概念
什么是搜索?百度、垂直搜索(站内搜索)搜索:通过一个关键词或一段描述,得到你想要的(相关度高)结果。如何实现搜索功能?用传统关系型数据库的模糊匹配?1、效率问题,如果使用数据库的模糊匹配,将会导致索引失效,也就是一次扫描将会是O(n)的时间复杂度,会造成一次全表扫描,当数据量大的时候,这个速度慢的是无法想象的。2、语义问题(结果不准确,相关度低),就像你在百度上搜索 “小米NFC智能手机”,实际上你更想将记录为“小米NFC手机”也能够检索出来,这是数据库模糊匹配无法实现的。ES是怎么做的?原创 2020-05-11 19:41:58 · 346 阅读 · 2 评论