关于elasticsearch:logstash导入movielens测试数据

1. movielens数据https://grouplens.org/dataset...学习训练,应用最小数据集即可:(ml-latest-small)[https://files.grouplens.org/d...] 2. logstash配置文件:在logstash/conf目录下拷贝一份logstash-sample.conf文件, 命名为:logstash-movies.conf,内容如下: # Sample Logstash configuration for creating a simple# Beats -> Logstash -> Elasticsearch pipeline.input { file { path => "/export/_backup/elk_bak/ml-latest-small/movies.csv" start_position => "beginning" sincedb_path => "/dev/null" }}filter { csv { separator => "," columns => ["id", "content", "genre"] } mutate { split => { "genre" => "|"} remove_field => ["path", "host", "@timestamp", "message"] } mutate { split => { "content" => "(" } add_field => { "title" => "%{[content][0]}"} add_field => { "year" => "%{[content][1]}"} } mutate { convert => { "year" => "integer" } strip => ["title"] remove_field => ["path", "host", "@timestamp", "content"] }}output { elasticsearch { hosts => ["http://localhost:9200"] index => "movies" document_id => "%{id}" #user => "user" #password => "password" } stdout {}}3. 执行导入bin/logstash -f config config/logstash-movies.conf执行须要等一会!而后控制台输入内容,如下......{ "id" => "193609", "genre" => [ [0] "Comedy" ], "title" => "Andrew Dice Clay: Dice Rules", "@version" => "1", "year" => 1991}待控制台不再输入,ctrl+c进行即可 ...

April 21, 2022 · 1 min · jiezi

关于elasticsearch:logstatsh数据同步

logstatsh数据同步 - 数据同步配置下载logstatshhttps://www.elastic.co/cn/dow...logstash同步数据库配置上传并解压logstash,地位放在如下:创立文件名:logstash-db-sync.conf,后缀为 conf ,文件名随便,地位也随便把数据库驱动拷贝:配置内容如下: cd logstash-6.4.3/bin启动logstash ./logstash -f logstash-db-sync.conflogstatsh数据同步 - 自定义模板配置中文分词vim logstash-ik.json vim logstash-db-sync.conf启动logstash ./logstash -f logstash-db-sync.conf

April 14, 2022 · 1 min · jiezi

关于elasticsearch:建立Elasticsearchik中文分词器

1.download or compile optional 1 - download pre-build package from here: https://github.com/medcl/elas... create plugin folder cd your-es-root/plugins/ && mkdir ikunzip plugin to folder your-es-root/plugins/ikoptional 2 - use elasticsearch-plugin to install ( supported from version v5.5.1 ): ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zipNOTE: replace 6.3.0 to your own elasticsearch version 2.restart elasticsearch

April 14, 2022 · 1 min · jiezi

关于elasticsearch:Elasticsearch整合SpringBoot-配置文件

创立工程,引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId><!--<version>2.1.5.RELEASE</version>--><version>2.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>配置yml spring:data:elasticsearch:cluster-name: es6cluster-nodes: 192.168.1.187:9300版本协调目前springboot-data-elasticsearch中的es版本贴合为es-6.4.3,如此一来版本须要对立,把es进行降级。等springboot降级es版本后能够在对接最新版的7.4。Netty issue fix @Configurationpublic class ESConfig {/*** 解决netty引起的issue*/@PostConstructvoid init() {System.setProperty("es.set.netty.runtime.available.processors", "false");}}附 elasticsearch6.4.3配置文件elasticsearch.yml cluster.name: es6node.name: node0path.data: /usr/local/elasticsearch-6.4.3/datapath.logs: /usr/local/elasticsearch-6.4.3/logsnetwork.host: 0.0.0.0

April 14, 2022 · 1 min · jiezi

关于elasticsearch:Elasticsearch集群脑裂现象探讨

什么是脑裂如果产生网络中断或者服务器宕机,那么集群会有可能被划分为两个局部,各自有本人的master来治理,那么这就是脑裂。脑裂解决方案master主节点要通过多个master节点独特选举后能力成为新的主节点。就跟班级里选班长一样,并不是你1集体能决定的,须要班里半数以上的人决定。解决实现原理:半数以上的节点批准选举,节点方可成为新的master。discovery.zen.minimum_master_nodes=(N/2)+1N为集群的中master节点的数量,也就是那些 node.master=true 设置的那些服务器节点总数。ES 7.X在最新版7.x中, minimum_master_node 这个参数曾经被移除了,这一块内容齐全由es本身去治理,这样就防止了脑裂的问题,选举也会十分快。

April 14, 2022 · 1 min · jiezi

关于elasticsearch:搭建Elasticsearch集群

前置操作当克隆当前,es中的data目录,肯定要清空,这外面蕴含了原先的索引库数据。配置集群批改 elasticsearch.yml 这个配置文件如下: # 配置集群名称,保障每个节点的名称雷同,如此就能都处于一个集群之内了cluster.name: imooc-es-cluster# 每一个节点的名称,必须不一样node.name: es-node1# http端口(应用默认即可)http.port: 9200# 主节点,作用次要是用于来治理整个集群,负责创立或删除索引,治理其余非master节点(相当于企业老总)node.master: true# 数据节点,用于对文档数据的增删改查node.data: true# 集群列表discovery.seed_hosts: ["192.168.1.184", "192.168.1.185", "192.168.1.186"]# 启动的时候应用一个master节点cluster.initial_master_nodes: ["es-node1"]最初能够通过如下命令查看配置文件的内容:more elasticsearch.yml | grep ^[^#]别离启动3台es切换到esuser后在启动,拜访集群各个节点,查看信息:http://192.168.1.184:9200/http://192.168.1.185:9200/http://192.168.1.186:9200/

April 14, 2022 · 1 min · jiezi

关于elasticsearch:安装esheader插件

办法1:装置谷歌浏览器拓展程序ElasticSearch Head 办法2: git clone git://github.com/mobz/elasticsearch-head.gitcd elasticsearch-headnpm installnpm run startopen http://localhost:9100/ vim elasticserach.ymlhttp.cors.enabled:truehttp.cors.allow-origin:"*"重启ES

April 14, 2022 · 1 min · jiezi

关于elasticsearch:配置Elasticsearch

vim /usr/local/elasticserach-7.4.2/config/elasticsearch.yml#集群名称cluster.name:my-elasticsearch#节点名称node.name:es-node1#数据门路path.data:/usr/loacl/elasticserach-7.4.2/data#日志门路path.logs:/usr/local/elasticserach-7.4.2/logs#绑定地址network.host:0.0.0.0#拜访端口号http.port:9200#发现节点cluster.initial_master_nodes:["es-node1"]留神:Elasticsearch是默认不容许root用户启动的 启动ES 后盾运行ES ./usr/loacl/elasticserach-7.4.2/bin/elasticserach -d

April 13, 2022 · 1 min · jiezi

关于elasticsearch:Elasticsearch-核心术语

外围概念ES -> 数据库索引index -> 表文档 document -> 行(记录)字段 fields -> 列 stu_index{id: 1001,name: jason,age: 19},{id: 1002,name: tom,age: 18},{id: 1003,name: rose,age: 22}集群相干分片(shard):把索引库拆分为多份,别离放在不同的节点上,比方有3个节点,3个节点的所有数据内容加在一起是一个残缺的索引库。别离保留到三个节点上程度扩大,进步吞吐量。备份(replica):每个shard的备份。简称shard = primary shard(主分片)replica = replica shard(备份节点)

April 13, 2022 · 1 min · jiezi

关于elasticsearch:Elasticsearch74源码编译记录

Elasticsearch 7.4.3 源码编译记录倡议:不要应用本机装的gradle,编译时会主动下载匹配版本的gradle环境Macos 10.4idea 2019jdk12elasticsearch7.4 代码编译过程1、克隆代码 https://github.com/elastic/el... 2、编译idea,这一步会主动下载对应版本的gradle,须要设置好java版本为jdk12 cd elasticsearch./gradlew idea3、导入idea,抉择导入 选中 build.gradle ,idea会提醒是否导入gradle我的项目,抉择是 4、打包对应版本的发行版文件,为一会启动做筹备.这一步参考elasticsearch/TESTING.assciidoc文件 cd elasticsearch./gradlew assemble5、打包胜利之后,到elasticsearch/distribution/packages下找到本人对应零碎的发行版文件 <img src="https://gitee.com/cuixt/photo/raw/master/uPic/2022%20/03%20/image-20220321211004360.png" alt="image-20220321211004360" style="zoom:100%;" /> 6、解压elasticsearch-oss-7.4.3-SNAPSHOT-x86_64.rpm,而后在elasticsearch 同级别目录下新建文件夹home,并把解压后的文件放到home文件夹下 <img src="https://gitee.com/cuixt/photo/raw/master/uPic/2022%20/03%20/image-20220321211247410.png" alt="image-20220321211247410" style="zoom:100%;" /> <img src="https://gitee.com/cuixt/photo/raw/master/uPic/2022%20/03%20/image-20220321211314101.png" alt="image-20220321211314101" style="zoom:100%;" /> 7、找到elasticsearch/server/build.gradle,批改 compileOnly 改为compile,详细信息查看上面 // compileOnly project(':libs:elasticsearch-plugin-classloader'),compileOnly 改为compile8、idea设置我的项目JDK与gradle版本 gradle版本与我的项目jdk保持一致 9、指定方才新建的home文件夹地址中的配置文件与数据寄存地址,参数内容如下 -Des.path.conf=/cxt/codework/github/elasticsearch/7.4/home/config-Des.path.home=/cxt/codework/github/elasticsearch/7.4/home-Djava.security.policy=/cxt/codework/github/elasticsearch7.4/home/config/java.policy-Dlog4j2.disable.jmx=trueJava.policy 文件内容如下 grant { permission java.lang.RuntimePermission "createClassLoader";}; 10、到这,如果还不能启动,那就纵情的谷歌与百度吧,也欢送留言一起探讨遇到的报错报错一ERROR: the system property [es.path.conf] must be set 解决方案参考第九步 报错二Caused by: java.lang.ClassNotFoundException: org.elasticsearch.plugins.ExtendedPluginsClassLoader 解决参考第七步 总结编译失败的起因很大一部分是 1、gradle版本问题,jdk版本问题,所以多看代码中自带的CONTRIBUTING.md,README.textile,TESTING.asciidoc,确认以后版本所依赖的环境版本要求,起码能少踩很多的坑 2、自身如果装置了gradle,确保装置的gradle不要对我的项目失效,尽量应用代码中elasticsearch/gradle中文件夹指定的gradle,如果要应用本机装置的gradle,请确保gradle版本对我的项目版本兼容 3、把下面第七步,第九步的参数都配置根本问题不大了,切实打包不胜利,也能够去官网下载发行版 原文链接https://mp.weixin.qq.com/s?__... 参考链接https://elasticsearch.cn/ques...

April 5, 2022 · 1 min · jiezi

关于elasticsearch:速看ElasticSearch如何处理空值

大家好,我是咔咔 不期速成,日拱一卒 在MySQL中,非常不倡议大家给表的默认值设置为Null,这个前期咔咔也会独自出一期文章来阐明这个事件。 但你进入一家新公司之前的业务中存在大量的字段默认值为Null,把这些值导入ElasticSearch中还是须要解决,接下来就看看ElasticSearch如何应答空值。 一、ElasticSearch如何解决Null值的先看一个案例,当值为null时会产生什么 POST /kaka/_bulk{ "index": { "_id": "1"}}{ "tags" : ["search"]} { "index": { "_id": "2"}}{ "tags" : ["search", "open_source"] } { "index": { "_id": "3"}}{ "tags" : null } { "index": { "_id": "4"}}{ "tags" :"null"}在这个案例中能够发现,第3、4都存在一个null值,不同的是一个为字符串null post /kaka/_search{ "query":{ "term": { "tags": null } }, "profile":"true"}当你执行下面这搜寻时会呈现上面这个谬误 { "error": { "root_cause": [ { "type": "illegal_argument_exception", "reason": "field name is null or empty" } ], "type": "illegal_argument_exception", "reason": "field name is null or empty" }, "status": 400}而后咔咔就跑到ElasticSearch文档找了一下起因,是因为在ElasticSearch中空值不能被索引或搜寻,当字段值为null时、空数组、null值数组时,会将其视为该字段没有值 ...

March 31, 2022 · 2 min · jiezi

关于elasticsearch:5ElasticSearch索引备份

1,装置Node.js# 解压tar -zxvf node-v12.18.3-linux-x64.tar.xz -C /home/install# 配置环境变量vi /etc/profile# 追加如下内容export NODEJS_HOME=/home/install/node-v12.18.3-linux-x64export NODEJS_PATH=$NODEJS_HOME/lib/node_modulesexport PATH=$NODEJS_HOME/bin:$PATH# 刷新环境变量source /etc/profile# 测试npm -vnode -v2,装置elasticdump具体的参数细节能够参考elasticdump官网,其实也蕴含具体的应用细节。在线装置npm install elasticdump -g应用离线缓存装置的形式# 解压缓存包,是在编写以后文档的时候保留的,如果生效了,在本地再生成一份即可tar -xvf npm-cache.tar# 进入node下的lib目录执行装置命令npm install --cache /root/.npm --optional --cache-min 99999999999 --shrinkwrap false elasticdump# 建设文件软连贯到系统命令,如果elasticdump不在这个目录下,能够应用一下命令查找find / -name 'elasticdump'ln -s /home/install/node-v12.18.3-linux-x64/node-v10.13.0-linux-x64/lib/node_modules/elasticdump/bin/elasticdump /usr/bin/elasticdump# 验证elasticdump --help3,简略应用案例# 备份索引elasticdump --input=http://192.168.73.156:9200/item --output=/home/elasticsearch/bakDemo/item_mapping.json --type=mapping # 备份数据elasticdump --input=http://192.168.73.156:9200/item --output=/home/elasticsearch/bakDemo/item_data.json --type=data# 还原索引elasticdump --input=/home/elasticsearch/bakDemo/item_mapping.json --output=http://192.168.73.156:9200/item --type=mapping# 还原数据elasticdump --input=/home/elasticsearch/bakDemo/item_data.json --output=http://192.168.73.156:9200/item --type=data4,全量备份与还原# 创立导出的目录,须要放弃为空mkdir /home/es_backup# 执行导出命令# 留神"--ignoreChildError"参数:ignoreChildError allows multi-elasticdump to continue if a child throws an error.multielasticdump \ --direction=dump \ --match='^.*$' \ --ignoreChildError \ --input=http://192.168.73.156:9200 \ --output=/home/es_backup # 执行还原命令# 留神:这里测试还原的版本是5.6.14,所以还是须要template的,然而自身在导出的文件中不蕴含template文件,所以这里应用ignoreType选项在导入的时候疏忽掉multielasticdump \ --direction=load \ --ignoreChildError \ --input=/home/es_backup \ --ignoreType='template' \ --output=http://192.168.73.156:9200

March 29, 2022 · 1 min · jiezi

关于elasticsearch:终结初学者对ElasticSearchKibanaLogstash安装的种种困难

我的项目中筹备应用ElasticSearch,之前只是对ElasticSearch有过简略的理解没有零碎的学习,本系列文章将从根底的学习再到深刻的应用。 咔咔之前写了一份死磕MySQL文章,现在再入一个系列玩转ElasticSearch。 本期文章会带给大家装置ElasticSearch、Kibana、Logstash、配置ElasticSearch外网可拜访、配置守护过程启动Kibana、ElasticSearch、应用Logstash导入演示数据到ElasticSearch中。 一、装置ElasticSearch从0开始搭建一个ElasticSearch环境,接下来先装置。 ElasticSearch官网在始终改版,有很多小伙伴找不到下载地位。 进去之后点击圈起来的地位,不要点击右边间接下载了 进去之后能够看到公布的历史版本,依据本人的需要下载对应的版本即可,这里咔咔下载的是7.1.0版本 如果你是Linux,能够关上开发者模式,把地址复制进去,应用wget + 地址 间接下载即可。 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.0-linux-x86_64.tar.gz 能够看到此时已将ElasticSearch下载下来了,这是曾经解压好的 到了这一步不要激动间接就去启动,ElasticSearch从5.x版本开始为了平安起见,不能间接应用root用户启用。 增加用户 执行useradd es,增加es用户 在root用户下把ElasticSearch用户权限给es用户即可 chown -R es ElasticSearch启动ElasticSearch 切到es用户后,执行执行./bin/elasticsearch即可启动ElasticSearch 启动呈现初始化密钥库问题 Exception in thread "main" org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /usr/local/elasticsearch/elasticsearch-6.6.0/config/elasticsearch.keystoreLikely root cause: java.nio.file.AccessDeniedException: /usr/local/elasticsearch/elasticsearch-7.1.0/config/elasticsearch.keystore at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214) at java.nio.file.Files.newByteChannel(Files.java:361) at java.nio.file.Files.newByteChannel(Files.java:407) at org.apache.lucene.store.SimpleFSDirectory.openInput(SimpleFSDirectory.java:77) at org.elasticsearch.common.settings.KeyStoreWrapper.load(KeyStoreWrapper.java:206) at org.elasticsearch.bootstrap.Bootstrap.loadSecureSettings(Bootstrap.java:224) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:289) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) at org.elasticsearch.cli.Command.main(Command.java:90) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92)Refer to the log for complete error details.这个版本须要进行平安认证性能须要创立elasticsearch.keystore这个文件所以输出上面的命令 ...

March 21, 2022 · 3 min · jiezi

关于elasticsearch:搜索引擎Elasticsearch简介实践

前言之前在寻找日志收集搜寻解决方案时,最常看到的便是 ELK:Elasticsearch + Logstash + Kibana 计划。只管因为它对服务器资源要求很高转而应用 了 Loki,但也对它初步钻研过。明天,就对其中的 Elasticsearch 深刻理解一番。 Elasticsearch 介绍Elasticsearch 是一个开源的搜索引擎,咱们能够用它来解决文本、天文空间(如坐标)、结构化(如 DB 里的表)、非结构化(如报表、图片)等数据,而后通过简略的 REST API 对其搜寻。它的最大特点就在于分布式以及实时速度,可部署到数百甚至上千台服务器上,以便咱们存储解决海量的数据,而且其速度依然能达到秒级。 它的底层应用的是 Apache Lucene。Apache Lucene 是一个高性能、功能强大的搜索引擎库,不过它只是一个库,须要应用 Java 能力集成到应用程序中。因而,Elasticsearch 对其进行了封装,屏蔽了底层的复杂性,对外只提供了简略的 RESTful API。 当 Elasticsearch 接管到像 Logstash 这种工具传输过去的数据后便会以文档的模式去剖析提取索引,压缩数据,按配置的分片规定将数据平均存储。在实现这些后,咱们就能够进行可视化查问了,例如应用 Kibana 面板查看。 因为 Elasticsearch 具备了易用性、实时剖析、全文搜寻、散布部署、高可用等个性,所以除了用来做日志的解决剖析外,还能够利用在平安剖析、指标剖析、性能监控等场景需要。 Elasticsearch 基本概念文档(Document)和传统的 DB 不一样,Elasticsearch 不是将数据存储为列式的二维表,而是采纳 Json 格局存储每一条数据,即文档是以键值对存在的字段汇合。如下就能够是一条文档: { "name": "John Smith", "age": 42}咱们也能够把文档了解为根对象,每条文档都会由惟一 \_id 标识它,如果咱们在插入文档时没有指定 \_id,则 Elasticsearch 将会主动生成一个。 索引(Index)Elasticsearch 之所以能进行实时搜寻,最重要的就在于拿到文档数据后会对 json 里的所有字段建设索引,而且依据字段的不同类型建设不同的索引数据结构,例如 text 类型的字段会建设倒排索引,而数字和天文类型的字段会存储在 BKD 树里。这里重点介绍下倒排索引。 有倒排就有正排,咱们先来看看正排索引,所谓的正排,咱们能够简略的认为间接依据文档 \_id 获取到文档内容,只有你晓得文档 \_id。 ...

March 16, 2022 · 2 min · jiezi

关于elasticsearch:用于-Elasticsearch-查询的查询-DSL-Builder

用于 Elasticsearch 查问的查问 DSL BuilderInstallcomposer require whereof/elastic-builder//须要自行装置 https://github.com/elastic/elasticsearch-phpcomposer require elasticsearch/elasticsearch version elasticsearch Version RequirementVersion 7.0 of this library requires at least PHP version 7.1. In addition, it requires the native JSON extension to beversion 1.3.7 or higher. Elasticsearch-PHP BranchPHP Version7.0> = 7.1.06.0> = 7.0.05.0> = 5.6.62.0> = 5.4.00.4, 1.0> = 5.3.9Examples$host = [ "127.0.0.1:9200",];$client = ClientBuilder::create()->setHosts($host)->setSSLVerification(false)->build();$build = Elastic::getInstance($client)->index('table');// select id,name form table where (name="whereof" or title="whereof") and password="whereof" and status BETWEEN 1 AND 2 order by id desc $rest = $build->field(['id', 'name'])->where('name|title', 'whereof')->where('password', "whereof")->whereBetween('status', 1, 2)->order('id', 'desc')->search();更多examples能够查看https://github.com/whereof/el...About Mehttps://github.com/whereof/wh... ...

February 27, 2022 · 1 min · jiezi

关于elasticsearch:ES性能调优与其它特性

一,写优化批量提交。每次提交的数据量为多大能力达到最优,受文件大小,数据类型,网络状况,集群状态等因素影响,一般来说一次批处理的数据大小应从5M-15M开始逐步减少直到没有性能提花为止。优化存储设置。尽量应用固态硬盘(solid state disk)正当应用段合并。段合并的计算宏大,会耗费大量的I/O,为了避免因段合并影响搜寻性能,咱们须要管制正当的合并速度,可通过参考进行配置缩小refresh次数。这个须要依据理论状况来看,如果咱们对搜寻的时效性不高,则能够减少提早refresh的工夫,这样还能够缩小段合并的数量。缩小flush的次数。这个同样须要结合实际状况来看,当translog的数量达到512M或30分钟时,会触发一次flush,磁盘长久化比拟耗资源,咱们能够通过参考设置正当的值缩小正本数。ES正本数能够保障集群可用性,也能够减少搜寻的并发数,但却会重大升高写索引的效率,因为在写索引时须要把整个文档的内容都发给正本节点,而所有的正本节点都须要把索引过程反复进行一遍。所以正本数不可过多。二,读优化防止大后果集和深翻页。如果有N个分片,协同节点须要收集每个分片的前from+size条数据,而后将收集到的Nx(from+size)条数据合并后再进行一次排序,最初从from+1开始返回size条数据。只有N,from,size其中有个值很大,这样的查问会耗费很多CPU,效率低下。为解决这类问题,ES提供了scroll和scroll-scan这两种形式。1) scroll形式。 与search申请每次返回一页数据不同,scroll是为检索大量的后果(甚至所有的后果)而设计的,比方,咱们有一个批量查问的需要,要查问1~100页的数据,每页有100条数据,如果用search查问,则每次都要在每个分片上查问得分最高的from+size条数据,而后协同节点把收集到的n×(from+size)条数据合并起来再进行一次排序。接着从from+1开始返回size条数据,并且要反复100次,随着from的增大,查问的速度越来越慢。但scroll的思路是:在各个分片上一次查问10000条数据,协同节点收集n×10000条数据,而后合并、排序,将排名前10000的后果以快照模式存储,最初应用相似数据库游标的模式逐次取得局部数据。这种做法的益处是缩小了查问和排序的次数。scroll在第一次查问时除了返回查问到的后果外,还会返回一个scroll_id,它是下次申请的参数。scroll也分query,fetch两个阶段,第一阶段query先将所有符合条件的doc_id查问并暂存;第二阶段fetch依据doc_id与scroll_id以游标的形式获取文档。须要留神的是scroll会应用快照的模式暂存数据,后续一段时间内数据如果有批改是感知不到的,所以它不适宜实时性要求高的场景2) scroll-scan形式。scroll在首次查问时须要进行文本类似度计算和排序,这个过程也比拟耗时,scroll-scan则敞开了这一过程。scroll-scan的特点是不做文本类似度计算;不反对聚合抉择适合路由在多分片的ES集群下,查问大抵分如下两种。1) 查问条件中蕴含了routing信息。查问时能够依据routing间接定位到其中的一个分片,而不须要查问所有分片,再通过协调节点二次排序。2) 如果查问条件不蕴含routing,整个查问过程就分scatter与gather两个过程。scatter(散发):在申请达到协调节点后,协调节点将查问申请散发到每个分片上gather(聚合):协调节点收集在每个分片上实现的搜寻后果,再将收集的后果集进行从新排序,返回给用户。三,堆大小的设置ES默认的堆内存大小是1GB,因为ES是比拟耗内存的利用,咱们能够将这个值调大一点。-Xms与-Xmx设置一样。内存调配还有两个准则: 最好不要超过物理内存的50%。ES底层是lucene实现的,因为lucene段的不变性,所以咱们不必思考数据的变动,这对缓存十分敌对,操作系统能够将这些文件缓存在操作系统的文件缓存零碎(filesystem cache)中而非堆内存中,如果超过物理内存过多,则留给文件缓存零碎就不多了堆内存最好不要超过32G。这是因为在64位操作系统中,指针自身会变大,会有更大的空间节约在指针自身上。性能调优就写到这里,上面看下ES里的一些个性,比方主节点选举,如何防止脑裂。 角色隔离因为节点默认的是node.master和node.data都为true,所以咱们往往会让Master节点也担当了Data节点的角色。Elasticsearch集群中的Data节点负责对数据进行增、删、改、查和聚合等操作,所以对CPU、内存和I/O的耗费很大,有可能会对Master节点造成影响,从而影响整个集群的状态。在搭建集群时,特地是比拟大的集群时,咱们应该对Elasticsearch集群中的节点做角色上的划分和隔离。咱们通常应用几个配置比拟低的虚拟机来搭建一个专门的Master集群。在集群中做角色隔离是一件非常简单的事件,只需在节点的配置文件中增加如下配置信息即可。 候选主节点: node.master =truenode.data=false数据节点: node.master =falsenode.data=truemaster选举前提条件:1) 只有是候选主节点(master:true)的节点能力成为主节点2) 最小主节点数(min_master_nodes)的目标是避免脑裂ES的选举是ZenDiscovery模块负责的,次要蕴含Ping(节点之间通过这个RPC来发现彼此)和 Unicast(单播模块蕴含一个主机列表以管制哪些节点须要 ping 通)这两局部。选举流程大抵如下:第一步:确认候选主节点数是否达标第二步:对所有候选主节点依据nodeId字典排序,每次选举每个节点都将本人所晓得节点排一秩序,而后选出第一个(第0位)节点,暂且认为它是master节点第三步:如果对某个节点的投票数达到肯定的值(候选主节点数/2+1)并且节点本人也选举本人,那这个节点就是master。否则从新进行直到满足下面条件。防止脑裂脑裂是因为网络起因导致在集群中选举出了多个master,最初导致一个集群被决裂为多个集群。了为避免脑裂,咱们须要在在Master集群节点的配置文件中增加参数discovery.zen.minimum_master_nodes,该参数示意在选举主节点时须要参加选举的候选主节点的节点数(默认值是1)。咱们通常应该把这个值设置成(master_ eligible_nodes/2)+1,其中master_eligible_nodes为Master集群中的节点数。这样做既能避免脑裂的景象呈现,也能最大限度地晋升集群的高可用性,因为只有不少于discovery.zen.minimum_ master_nodes个候选节点存活,选举工作就能够顺利进行。参考文章:elasticsearch scroll查问的原理没太懂Elasticsearch之SearchScroll原理分析和性能及稳定性优化

February 17, 2022 · 1 min · jiezi

关于elasticsearch:es实战使用IK分词器进行词频统计

简介:通过IK分词器分词并生成词云。 本文次要介绍如何通过 IK 分词器进行词频统计。应用分词器对文章的词频进行统计,次要目标是实现如下图所示的词云性能,能够找到文章内的重点词汇。后续也能够对词进行词性标注,实体辨认以及对实体的情感剖析等性能。 词频统计服务具体模块如下: 数据输出:文本信息数据输入:词 - 词频(TF-IDF等) - 词性等内容应用的组件:分词器、语料库、词云展现组件等性能点:白名单,黑名单,同义词等现存的中文分词器有 IK、HanLP、jieba 和 NLPIR 等几种,不同分词器各有特点,本文应用 IK 实现,因为 ES 个别应用 medcl 等大佬封装的 IK 分词器插件作为中文分词器。 因为 ES 的 IK 分词器插件深度联合了 ES,仅对文本分词应用不到 ES 的内容,所以文本采纳申艳超大佬版本的 IK。 1. IK 分词统计代码IK 的代码绝对比较简单,货色不多,将 String 拆分为词并统计代码如下: 单纯统计词频: /** * 全文本词频统计 * * @param content 文本内容 * @param useSmart 是否应用 smart * @return 词,词频 * @throws IOException */private static Map<String, Integer> countTermFrequency(String content, Boolean useSmart) throws IOException { // 输入后果 Map Map<String, Integer> frequencies = new HashMap<>(); if (StringUtils.isBlank(content)) { return frequencies; } DefaultConfig conf = new DefaultConfig(); conf.setUseSmart(useSmart); // 应用 IKSegmenter 初始化文本信息并加载词典 IKSegmenter ikSegmenter = new IKSegmenter(new StringReader(content), conf); Lexeme lexeme; while ((lexeme = ikSegmenter.next()) != null) { if (lexeme.getLexemeText().length() > 1) {// 过滤单字,也能够过滤其余内容,如数字和单纯符号等内容 final String term = lexeme.getLexemeText(); // Map 累加操作 frequencies.compute(term, (k, v) -> { if (v == null) { v = 1; } else { v += 1; } return v; }); } } return frequencies;}统计词频和文档频率: ...

January 30, 2022 · 3 min · jiezi

关于elasticsearch:全观测系列Elasticsearch应用性能监控最佳实践

简介:本文介绍了利用性能监控的利用价值以及解决方案等。 1、什么是全观测?要理解全观测,咱们先看看传统运维存在哪些问题。 数据孤岛,扩散在不同部门,剖析排查故障艰难;多个厂商的多种工具,无奈自动化对立剖析;故障是平面的,日志、指标等都只能看到一方面的可察看性;只进行收集,没有真正深入分析,不能施展大数据的价值;而全观测是对传统运维的改良。它将日志、指标、APM数据,汇总在一个平台,让运维、开发、业务人员对所有的数据从对立视角进行察看剖析,能够实现—— 建设对立的可视化视图、对齐工夫、过滤条件;建设对立的基于规定的监控和告警;建设对立的机器学习的智能监控和告警。 在整个全观测中包含日志、指标,APM这三要素中,大家绝对比拟生疏的可能是APM。 2、什么是利用性能监测APMAPM定义:企业应用APM对本身简单的软件及应用程序的运行状态进行监测、诊断和剖析,从而缩短故障定位工夫和晋升故障的定位准确度,进而晋升利用运行效益和优化用户的应用体验。 APM波及的技术类型包含人工智能、大数据、云计算,它的外围是用户体验,晋升利用可靠性性,晋升利用品质,升高IT总领有老本。 随着当今利用的多元化和复杂化,咱们须要通过APM这样一个利用性能监测,实现端到端业务性能的剖析,同时帮忙理解咱们的服务,比如说工夫都花在了什么下面,服务解体的起因是什么,整个服务的瓶颈在哪里,从而使咱们更好的去跟踪、优化终端用户的体验。 3、利用性能监测APM场景3.1 APM利用场景及痛点• 利用异样诊断 — 散布式微服务架构的利用进行故障排查时存在问题定位难的景象; — 业务逻辑复杂化使企业对利用架构梳理和治理难度减少。 • 利用体验治理 — 用户体验间接影响应用服务发展前景,但获取用户拜访零碎时的真是和具体情况难。须要及时且疾速定位新故障或复现用户反馈的问题场景,高效解决故障,避免客户散失 • 利用异样诊断 — 多视角剖析关联指标和告警数据,并生成故障根因剖析报告 — 联合历史数据与运维教训,实时剖析异样事务的产生起因 3.2 APM能力及业务价值• 被动监测与被动监测,重视终端用户体验优化 • 实时、可视化利用架构,帮助用户全面理解简单的基础设施 • 利用数据积攒及实时更新,为解决不同平台问题提供数据撑持 • 门路跟踪与及时预警,升高故障损失 • 深刻监控利用组件,偏重监控工具之间运作的功效,助力用户疾速定位和解决问题 4、阿里云Elasticsearch利用性能监测性能公布基于开源Elastic APM构建,提供云上一键托管的阿里云Elasticsearch利用性能监控Server节点服务拉起,反对应用阿里云Elasticsearch作为其数据存储,并容许实时监控数千个应用程序的性能。 用户可通过Agent收集蕴含传入申请、数据库查问、缓存调用、内部HTTP申请、谬误及异样等多种具体的性能信息,并通过Elasticsearch进行存储及可视化剖析,为企业及开发者提供高效的应用程序性能优化与监控能力。 4.1 用户依据默认提供的代理Agent及数据采集模板进行数据收集用户可应用与服务雷同的语言编写的开源库,代理程序会挂钩应用程序并收集性能指标和谬误,所有数据都会收集并发送到Server端。 4.2 云上托管阿里云ES利用性能监控Server实例创立与治理一键拉起Server节点并进行灵便的扩缩及配置,Server通过JSON HTTP API从代理接收数据,单个节点通常能够解决来自数百个代理的数据。 4.3 配置关联阿里云ES实例,联合Kibana进行性能指标数据存储及剖析联合阿里云ES自研日志Indexing Service以及海量存储Openstore,能够达到高并发的写入能力,以及低成本、近实时地存储搜寻海量数据。云上收费托管拉起的Kibana节点提供丰盛的数据分析及可视化能力。 5、全观测场景技术难点和解决方案如何通过云上Elastic Stack能力去解决全观测-日志场景下的痛点。 5.1 全观测场景面临哪些痛点日志/指标获取难机器、业务零碎、网络链路、操作系统,诸多指标及日志获取伎俩不一,落地过程简单; 日志/指标规格化要求高上下游链路配合连接过程中,如何将无效信息从海量日志中获取; 高并发写入、零碎稳定性差业务/流量抖动,日志写入峰值往往会很高,旁路零碎稳定性受到很大的挑战; 海量数据存储老本高日志场景波及海量数据,TB级别起步,甚至PB级; 日志剖析和指标监控对立难借助时序零碎能够很好的实现监控,但异样剖析艰难相同,如何在对立平台实现; 零碎可扩展性要求高业务调整带来的技术演进始终在产生,技术组件更新快,运维框架须要有弱小的兼容性; 5.2 云上ELK全观测解决方案能力Beats/APM获取日志/指标轻量化的提供各类metic、logs、APM数据采集能力; 数据荡涤SQL化更繁难反对各类网络格局的日志/指标采模板,实时计算Flink提供残缺流式SQL能力; 云上ES写入托管及超强稳定性提供Indexing service自研ES写入托管服务,及跨机房部署、同城容灾、场景内核优化; 低成本数据存储阿里云ES提供冷热拆散数据存储形式,及自研存储引擎Openstore优化存储压缩算法; 日志剖析、指标监控、APM能力齐全阿里云ElastiStack全托管,提供日志剖析、监控、Tracing一站式能力; 针对时序场景,针对性优化引擎,保障时序日志监控和剖析的性能; 开源生态具备弱小的可扩展性基于分布式架构,以及灵便凋谢的RestAPI和Plugin框架,反对各种扩大能力。 6、ES全观测解决方案实现日志监控/运维/剖析计划选型:100%兼容开源,与各类开源生态组件无缝连接;反对多云/跨云的日志监控、运维剖析场景计划劣势:云上Elasticsearch端到端的采集传输及剖析能力,提供面向海量数据的高性能读写、高弹性、低成本解决方案 7、时序日志场景痛点剖析写多读少的日志场景下会遇到什么问题? ...

January 30, 2022 · 1 min · jiezi

关于elasticsearch:Elasticsearch由来及发展

Elasticsearch 以前叫 Elastic Search。顾名思义,就是“弹性的搜寻”。很显著, 它一开始是围绕着搜寻性能,打造了一个分布式搜索引擎,底层是基于开源的搜索引擎库 Lucene,是由 Java 语言编写的,我的项目大略是 2010 年 2 月份在 Github 正式落户的。 Lucene什么是Lucene?Lucene 是一个用 Java 编写的十分古老的搜索引擎工具 包,用来构建倒排索引(一种数据结构)和对这些索引进行检索,从而实现全文检索性能。 毛病1、仅仅是一个根底类库。 2、没有思考高并发分布式场景。 3、不欠缺的api构造:想在本人的程序外面应用 Lucene,还是须要做很 多工作,并且波及很多搜寻原理和索引数据结构的常识,这就给咱们带来了不少挑战。 所以,Lucene 的上手工夫个别都比拟长。 Elasticsearch诞生背景2004 年,有一个以色列小伙子,名字叫谢伊·班 农( Shay Banon),他成亲不久来到伦敦,因为过后他的夫人正好在伦敦学厨师。初 来乍到,也没有找到工作,于是班农就打算写一个叫作 iCook 的小程序来治理和搜寻菜 谱,一来练练手,不便找工作;二来这个小工具还能够给其夫人用。 班农在编写 iCook 的过程中,应用了 Lucene,感触到了间接应用 Lucene 开发 程序的各种暴击和苦楚,于是他在 Lucene 之上,封装了一个叫作 Compass 的程序框 架,与 Hibernate 和 JPA 等 ORM 框架进行集成,通过操作对象的形式来主动地调用 Lucene 以构建索引。不便地实现对‘畛域对象’进行索引的创立,并实现‘字 段级别’的检索,以及实现‘全文搜寻’性能。能够说,Compass 大大简化了给 Java 程序增加搜寻性能的开发。Compass 开源进去,变得很风行。 Compass 编写到 2.x 版本的时候,社区外面呈现了更多需要,比方须要有解决 更多数据的能力以及分布式的设计。班农发现只有重写 Compass ,能力更好地实现这 些分布式搜寻的需要,于是 Compass 3.0 就没有了,取而代之的是一个全新的我的项目, 也就是 Elasticsearch。” ...

January 27, 2022 · 1 min · jiezi

关于elasticsearch:elasticsearch-部署和应用详细

es简介Elasticsearch 是一个分布式可扩大的实时搜寻和剖析引擎,一个建设在全文搜索引擎 Apache Lucene(TM) 根底上的搜索引擎Elastic官网https://www.elastic.co/cn/次要性能:分布式搜寻数据分析分组和聚合es下载地址https://www.elastic.co/cn/downloads/linux装置es将下载的安装包上传导linux服务器,我的版本是elasticsearch-7.2.0-linux-x86_64.tar.gz创立usr/local/soft/es目录,将es解压到这个目录中批改es的yum文件node.name: node-1// 这个很重要http.host: 0.0.0.0http.port: 9200批改es的jvm.options-Xms256M-Xmx256M创立新的用户来启动es useradd esuser赋予权限 chown -R esuser:esuser /usr/local/software/elasticsearch-7.2.0切换到esuser用户 su esuser通过es用户后盾启动es sh elasticsearch -d验证是否启动胜利curl -X GET "http://localhost:9200"增加ik到es中下载ik的版本必须和es版本对应将ik放到es的plugin目录下进行解压es重启后会加载ik es中新增索引postcurl -X PUT "localhost:9200/post" 将分词器批改成ik敞开索引POST post/_close配置ikPUT post/_settings{ "number_of_replicas": 0, "index":{ "analysis.analyzer.default.type":"ik_max_word", "analysis.search_analyzer.default.type":"ik_smart" }}开启post索引POST post/_open创立es的mapping,依据本人的需要创立curl --location --request PUT '787k.fun:9200/post/_mapping' \--header 'Content-Type: application/json' \--data-raw '{ "properties": { "id": { "type": "integer" }, "title": { "type": "text" }, "content": { "type": "text" }, "blogImg": { "type": "keyword" }, "html_content": { "type": "keyword" }, "authorId": { "type": "integer" }, "authorName": { "type": "keyword" }, "tag": { "type": "integer" }, "type": { "type": "integer" }, "status": { "type": "integer" }, "commentCount": { "type": "integer" }, "score": { "type": "double" }, "created": { "type": "date" }, "updated": { "type": "date" } }}'springboot集成espom文件退出依赖 <!--es开始--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.2.0</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.2.0</version> </dependency> <!--es完结-->yum文件增加文件elasticsearch.host=localhostelasticsearch.port=9200es配置文件移步

January 23, 2022 · 1 min · jiezi

关于elasticsearch:一篇就懂230页Elasticsearch大数据搜索引擎解读PDF

智慧生物的大规模合作造就了惊人的进化奇观。大规模机器集群造就机器零碎进化成为弱小的智能零碎。Elasticsearch作为大数据与搜索引擎技术的结合体,随着社会对大规模开源分布式搜索引擎的需要迅速成长。 本篇文章从基本概念开始相熟Elasticsearch,接下来介绍了Elasticsearch在 Windows和Linux操作系统下的装置。除了CURL命令,介绍了应用罕用的编程工具和Elasticsearch 搜寻服务交互,包含Java、Python、Scala和 PHP,以及应用SQL语句查诲Elasticsearch 索引的办法。自然语言文本了解往往以插件模式存在于Elasticsearch集群中。 第2章介绍了如何开发与测试插件。因为 Elasticsearch常常用于实时搜寻或剖析,所以性能优化很重要。第3章介绍了如何治理 Elasticsearch 集群。为了更正当地应用和扩大Elasticsearch,第4章简略剖析了 github 中托管的Elasticsearch源代码。对于搜索引擎来说,返回后果的相关性是一个重要的话题,第5章探讨了这个问题。第6章介绍了应用Java开发搜索引擎Web 用户界面的几种办法。 随着人工智能畛域技术的倒退,让搜索引擎智能减速变成事实。智能搜索引擎须要可能检测到并辨认出图像中的文字,第7章介绍了联合OpenCV应用Tesseract 辨认文字的办法。第8章介绍了依据问题返回搜寻后果的问答式搜寻。目前 Elasticsearch是实时系统监控的首选,第9章介绍了应用Elasticsearch 监控与剖析日志,也介绍了通过物联网监控零碎的计划。 因为文章篇幅问题,以下就展现了局部截图,须要全文PDF文档的小伙伴点赞+转发之后,【点击此处】即可收费获取残缺pdf第1章 应用Elasticsearch 1.1 基本概念1.2 装置1.3 搜寻集群1.4 创立索引1.5 应用Java客户端接口 1.6 RESTClient 1.7 应用Jest1.8 Python客户端1.9 Scala客户端1.10 PHP客户端1.11 SQL反对1.12 本章小结第2章 开发插件2.1 搜寻中文2.2 搜寻英文2.3 应用测试套件2.4 本章小结 第3章 治理搜寻集群3.1 节点类型3.2 治理集群3.3 写入权限管制3.4 应用X-Pack3.5 快照3.6 Zen发现机制3.7 联结搜寻3.8 缓存3.9 本章小结 第4章 源码剖析4.1 Lucene源码剖析4.2 Gradle4.3 Guice4.4 Joda-Time4.5 Transport4.6 线程池4.7 模块4.8 Netty4.9 分布式4.10 本章小结 因为文章篇幅问题,以下就展现了局部截图,须要全文PDF文档的小伙伴点赞+转发之后,【点击此处】即可收费获取残缺pdf第5章 搜寻相关性5.1 BM25检索模型5.2 学习评分 第6章 搜索引擎用户界面6.1 JSP实现搜寻界面6.2 应用Spring实现的搜寻界面6.3 实现搜寻接口6.4 实现类似文档搜寻6.5 实现AJAX搜寻联想词6.6 举荐搜索词6.7 查问用意了解6.8 集成其余性能6.9 查问剖析6.10 部署网站 ...

January 22, 2022 · 1 min · jiezi

关于elasticsearch:ES系列教程02Elasticsearch一日游

> 本文最早公布于公众号极客军营,原文地址学习ElasticSearch(后续简称ES)最好的办法就是多入手实际。在该系列教程中,我会应用“在线书店”这个小我的项目贯通每一个章节。这个我的项目的背景很简略,每本书都有ISBN、题目(title)、形容(description)、价格(price)、作者(author)、出版社(publisher)和库存(stock)七个属性,将书的信息存储在ES中,用户能够依据书的某些属性信息搜寻想要买的书。 为了能让大家对ES整体有一个直观的感触,本节我将率领大家疾速浏览ES的各项能力。你刚看到某些概念可能会一头雾水,不过没有关系,本节波及到的所有内容在后续的章节中都有具体介绍,大家对本节中呈现的概念只须要先有个意识即可。 与ElasticSearch交互要应用ES提供的服务,首先要晓得如何给ES下达指令。ES服务器提供了一系列的RESTful API,能够通过HTTP协定将数据或指令以JSON序列化的模式发送给ES提供的API接口。 咱们都晓得,基于RESTful格调设计的网络应用应用GET、POST、PUT、DELETE四种HTTP动词对服务端资源进行操作,其中GET用于获取资源,POST用于新建资源,PUT用于更新资源,DELETE用于删除资源。 例如,通过上面的curl命令发送HTTP POST申请给ES,保留一本书的信息: curl -X POST -H "Content-Type: application/json" -d \ '{"title": "零根底学Java", "description": "自学JAVA的入门图书", "price": 66.88}' \http://localhost:9200/book_store/_doc?pretty该条curl命令的执行后果如下图,任何编程语言或工具都能够通过HTTP协定调用ElasticSearch提供的RESTful API接口。 如果咱们每次都通过一长串的curl命令调用ElasticSearch未免有点繁琐,Kibana为咱们提供了更不便的操作形式。 在Kibana左侧导航栏中,有一个菜单叫做Dev Tools(开发工具),菜单地位见下图: 应用Dev Tools能够让咱们以十分便当的形式操作ES,例如下图在Dev Tools中的操作与上述的curl命令完全相同——在ES中保留一本书的信息。 相比于应用curl命令, 在Kibana Dev Tools中能够省略对Content-Type的申明、ES服务器的IP地址和监听端口。因为这些信息Kibana都晓得,会主动帮咱们增加上,就不必咱们额定明确指定了。此外在Kibana中输出的命令格局比拟好看,点击箭头(Click to send request)就能够间接向ES发送命令,并在其右侧显示Response后果,应用起来十分不便。 前面所有的示例代码都是在Kibana中应用的,即都不须要明确指定HTTP Header信息和服务器IP地址。 基本概念在介绍其它内容之前,咱们先来认真看看ES返回的Response: { "_index" : "book_store", "_type" : "_doc", "_id" : "E2lww30BAtxnt_qoQMJz", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 15, "_primary_term" : 2}ES的Response也是JSON构造,从其result字段能够得悉咱们曾经胜利在ES中保留了一本书的信息。此外还有三个须要关注的字段:_index、_type和_id,它们别离示意索引(Index)、类型(Type)、文档ID(Document ID)。 ...

January 4, 2022 · 4 min · jiezi

关于elasticsearch:ES系列教程01Elasticsearch学习环境搭建

> 本文最早公布于公众号极客军营,原文地址Elasticsearch是一款十分弱小的开源搜索引擎,能够帮忙咱们疾速地从海量数据中搜寻到想要获取的信息。例如当你在网上商城购物时,ElasticSearch能够帮忙你疾速获取想要查找的商品;当你在GitHub上搜寻时,ElasticSearch不仅可能帮忙你找到对应的代码仓库,还能反对代码级搜寻并高亮显示对应的代码片段。 ElasticSearch还是一个大数据分析平台,具备十分强的数据分析能力。相比于Hadoop的“T+1”时效性,ElasticSearch的性能更高,能够近实时的获取数据分析后果。 工欲善其事,必先利其器。 在真正学习ElasticSearch之前,让咱们先来筹备好学习试验环境。 装置ElasticSearch和KibanaElasticSearch是一款天生反对分布式的搜索引擎,能够只部署一个ElasticSearch节点,也能够轻松部署由多个节点组成的集群,节点数量对利用开发是通明的。 除了装置ElasticSearch外,咱们还会装置Kibana。Kibana是一个治理和操作ElasticSearch的平台,具备很多弱小的性能,通过它能够不便咱们对ElasticSearch进行操作。 能够在如下地址下载到最新版本的ElasticSearch和Kibana;截至2021年12月7日,ElasticSearch的最新版本是7.15.2。 https://www.elastic.co/cn/downloads/笔者的桌面PC运行的是Ubuntu Linux操作系统,下载好的ElasticSearch和Kibana压缩包及解压后的文件夹如下图所示: 首先进入到ElasticSearch文件夹,运行如下命令,启动ElasticSearch(如果你心愿在后盾以Daemon形式启动,能够减少-d参数): ./bin/elasticsearch能够通过上面的curl命令判断ElasticSearch是否启动胜利: curl http://localhost:9200如果收到相似上面的Response,就证实ElasticSearch曾经胜利装置并启动了: { "name" : "poype", "cluster_name" : "elasticsearch", "cluster_uuid" : "QqnV6yVtQte10Dw3IN6eEQ", "version" : { "number" : "7.15.2", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "93d5a7f6192e8a1a12e154a2b81bf6fa7309da0c", "build_date" : "2021-11-04T14:04:42.515624022Z", "build_snapshot" : false, "lucene_version" : "8.9.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search"}上面咱们来启动Kibana,同样进入到Kibana对应的目录下,执行如下命令; ./bin/kibana待过程启动后在浏览器中输出: http://localhost:5601如果能看到相似下图的欢送页面就证实Kibana启动胜利。Kibana启动后会主动关联到刚刚启动好的Elasticsearch。 在Docker中运行ElasticSearch相比于在操作系统上间接装置ElasticSearch和Kibana,我更举荐大家利用Docker搭建学习环境。 操作系统的某些环境因素可能会导致ElasticSearch无奈启动。例如,如果你本机装置的Java版本不合乎ElasticSearch的要求,会导致启动失败,必须重置JAVA_HOME环境变量能力使ElasticSearch启动胜利。而利用Docker能够模仿一个洁净的Linux沙箱环境,能够无效防止环境因素对ElasticSearch的烦扰。 此外,利用docker-compose能够一次部署多个容器,这样就能够一键部署蕴含多个节点的ElasticSearch集群,省去了很多繁琐的操作,使每次的部署更加不便。 笔者曾经筹备好了上面的docker-compose.yml文件,定义了一个由三个ElasticSearch节点组成的集群和一个Kibana节点,大家可间接应用。 version: '2.2'services: es01: image: docker.elastic.co/elasticsearch/elasticsearch:7.15.2 container_name: es01 environment: - node.name=es01 - cluster.name=es-docker-cluster - discovery.seed_hosts=es02,es03 - cluster.initial_master_nodes=es01,es02,es03 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - data01:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - elastic es02: image: docker.elastic.co/elasticsearch/elasticsearch:7.15.2 container_name: es02 environment: - node.name=es02 - cluster.name=es-docker-cluster - discovery.seed_hosts=es01,es03 - cluster.initial_master_nodes=es01,es02,es03 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - data02:/usr/share/elasticsearch/data networks: - elastic es03: image: docker.elastic.co/elasticsearch/elasticsearch:7.15.2 container_name: es03 environment: - node.name=es03 - cluster.name=es-docker-cluster - discovery.seed_hosts=es01,es02 - cluster.initial_master_nodes=es01,es02,es03 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - data03:/usr/share/elasticsearch/data networks: - elastic kibana: image: docker.elastic.co/kibana/kibana:7.15.2 container_name: kibana environment: ELASTICSEARCH_HOSTS: '["http://es01:9200","http://es02:9200","http://es03:9200"]' SERVER_NAME: kibana.example.org ports: - "5601:5601" networks: - elasticvolumes: data01: driver: local data02: driver: local data03: driver: localnetworks: elastic: driver: bridge将这段yaml配置拷贝到名字为docker-compose.yml的文件中,并在与该文件雷同的门路下执行docker-compose up命令便能一键启动一个完满的ElasticSearch集群。 ...

January 4, 2022 · 2 min · jiezi

关于elasticsearch:ES系列教程00Elasticsearch学习心得

> 本文最早公布于公众号极客军营,原文地址往年5月,因为参加的我的项目中有大量的全文搜寻业务场景,我开始深刻学习和应用Elasticsearch。然而,刚开始的学习之路并不顺利,这次要有如下两点起因: Elasticsearch的相干材料比拟少,优良的书籍的确不多;Elasticsearch更新太快,且新版本与老版本相比变动较大,很多书籍的内容都有些过期。通过这半年多的学习和实际,我对Elasticsearch有了更加深刻的理解。于是我有了一个想法:写一份对于Elasticsearch的教程,一是对本人的学习成绩做一个总结;二是心愿可能帮忙到更多的人学习Elasticsearch。 该系列教程将基于Elasticsearch的最新版本7.15.2(截至21年12月7日)。联合我本人的学习经验,我打算将整个教程依照从易到难,分成如下四个章节: 一、根底篇置信很多读者跟我一样,都是一线研发工程师。学习Elasticsearch次要是为了能疾速把握其基本概念,具备开发搜寻类利用的能力。本章指标就是能让大家疾速把握Elasticsearch的基础知识,尽快让大家有能力利用Elasticsearch开发业务性能。 本章不会波及分片、正本、集群等分布式概念,更不会蕴含对Apache Lucene的解说。因为这些对Elasticsearch利用开发都是通明的。 学习完本章后,你将会理解如下内容: 什么是索引;什么是索引的mapping;ElasticSearch数据的CRUD操作;罕用的搜寻(search)操作;搜寻的原理——分词器、倒排索引;只有认真学习完本章内容后,你肯定有能力胜任Elasticsearch利用的开发工作,并为后续的深刻学习打好根底。 二、分布式篇尽管分片、正本、集群这些概念对利用开发是通明的,但对于一些高级别同学,除了要负责一般的业务需要开发外,还要能胜任生产运维、容量布局、零碎调优等工作。这就要求咱们对Elasticsearch集群的分布式工作形式有粗浅的了解。 本章会介绍Elasticsearch集群如何程度扩大、如何确保集群高可用、如何执行分布式搜寻等内容。 三、深刻搜寻篇在学习完前两个章节后,置信大家曾经有能力在工作中很好的应用Elasticsearch了。但业务需要复杂多变,如何为用户提供更精准的搜寻后果,提供用户真正想要获取的信息是咱们一直谋求的指标。本章将深挖搜寻的各项个性,介绍如何对搜寻后果进行优化。 四、深刻聚合篇除了搜寻以外,ElasticSearch还是一个大数据分析平台,具备十分强的数据分析能力。相比于Hadoop的“T+1”时效性,ElasticSearch的性能更高,能够近实时的获取数据分析后果。本章会对ElasticSearch聚合剖析的能力做深刻的介绍,帮忙大家具备从海量数据中疾速获取剖析后果的能力。 最初,感激浏览本文的你,心愿你能喜爱接下来的教程。上面话不多说,让咱们开启ElasticSearch学习之旅吧! 喜爱本文的敌人,欢送关注公众号极客军营,收看更多精彩内容

January 4, 2022 · 1 min · jiezi

关于elasticsearch:一文详解-开放搜索兼容Elasticsearch做召回引擎

简介:凋谢搜寻公布开源兼容版,反对阿里云Elasticsearch做搜寻召回引擎,本文具体介绍阿里云ES用户如何通过接入凋谢搜寻兼容版丰盛行业分词库,晋升查问语义理解能力,无需开发、算法投入,即可取得淘系同款搜寻成果。 凋谢搜寻开源兼容版简介很多客户在搭建搜寻业务时更相熟开源技术栈,会抉择Elasticsearch/Solr等开源引擎负责搜寻的召回环节,然而在召回引擎以外训练NLP、排序等算法能力,不仅耗时耗力,而且大部分处于高投入低回报的状态。 凋谢搜寻开源兼容版的Elasticsearch引擎则是基于阿里巴巴在搜寻畛域的积攒,凋谢搜寻的Elasticsearch引擎实例作为一个阿里云Elasticsearch的插件,运行在用户的阿里云Elasticsearch集群中,提供阿里自研行业分词能力、Query剖析理解能力,从而缩小了用户对算法模块的投入,能够将更多精力投入到业务转化、产品性能等需要上。 业务流程图: 凋谢搜寻兼容版劣势基于阿里巴巴多年词库积攒及达摩院NLP技术,丰盛Elasticsearch开源引擎分词库,晋升搜寻成果;在通用分词根底上还减少行业分词能力,可笼罩电商、IT内容、教育、游戏、互娱等行业。 赋予Elasticsearch引擎Query理解能力,精准定位用户搜寻用意;通过对Query进行一系列智能语义剖析(拼写纠错、同义词改写、词权重、停用词、实体辨认)了解用户搜寻用意,改写用户搜寻Query,使召回后果更合乎需要; 提供自定义分词、查问剖析干涉词典的能力,在凋谢搜寻控制台配置后会即便失效用户可依据本身业务进行调整和优化,高效响应搜寻需要,晋升搜寻成果和用户体验; 开源兼容版ES引擎实例创立及配置一、创立Elasticsearch引擎实例1.登录凋谢搜寻控制台,并进入实例治理-Elasticsearch引擎页面,点击创立利用: 2.页面会跳转至Elasticsearch搜寻增强版售卖页,抉择创立利用须要的磋商类型、地区,填写好利用名称,抉择资源组,最初点击立刻购买即可: 3.创立胜利后,即可在实例治理-Elasticsearch引擎页面查看新创建的利用实例: 二、配置Elasticsearch引擎实例配置利用蕴含关联阿里云Elasticsearch实例、装置插件、配置实现三步: 实例治理-Elasticsearch引擎页面,找到待配置状态的实例,点击配置,进入关联阿里云Elasticsearch利用页面: 装置插件: 点击“确定”,则开始装置自定义插件(会触发Elasticsearch集群重启): 配置胜利,期待插件装置: 三、Elasticsearch引擎实例搜寻测试在阿里云Elasticsearch控制台实例详情页中确认凋谢搜寻的“Elasticsearch搜寻增强版自定义插件”是否曾经装置: 登录Elasticsearch可视化控制台通过Dev Tools工具测试已装置的插件: 理解更多具体配置内容,查看产品文档:https://help.aliyun.com/docum... 客户案例某新批发客户,打造1公里社区网店服务,为用户提供吃、喝、玩、乐一体化生存服务。 客户搜寻业务痛点自建搜寻成果差,搜不准、搜不到间接影响用户体验;不足行业分词库,自研难度大,开发周期长,难以响应业务需要;成熟的搜索引擎波及离线模块、在线模块、查问了解服务、算法平台等零碎组成,所需大量开发、算法调优以及继续的简单运维工作,自建成本高; 开源兼容版解决方案调用凋谢搜寻电商行业分词库 集成淘宝搜寻同款电商分词器,训练语料来自淘宝搜寻多年积攒的百万级有标注的电商行业数据,可精确辨认商品品牌、品类、产品个性等电商属性query; 调用电商查问语义了解性能 电商拼写纠错用户输出的query并不总是正确的,谬误的输出可能导致查问后果不合乎预期或者是无后果,因而须要对用户的输出进行拼写查看。OpenSearch的查问剖析中提供的拼写查看性能,对查问词中的谬误进行纠正,给出正确的查问词。并依据纠错的可信度高下,决定以后查问是否用纠错后的词进行查问。 电商同义词同义词性能次要是对查问词进行同义扩大,扩充召回和查问词同义的文档。 电商实体辨认全称命名实体辨认(Named Entity Recognition,简称NER),指对查问词中的具备特定意义的语义实体进行辨认。查问剖析依据辨认的后果,根据实体类型的权重对查问词进行改写,使得召回的文档合乎查问的用意。 成果反馈无需额定投入人力资源,在不扭转现有ES应用习惯状况下,从理解到测试到接入上线短短15天就取得高质量搜寻成果,企业有更多资源精力投入到产品性能和业务晋升中去。 商品搜寻无后果率30%降至5%以下,指标还在继续优化中;搜寻疏导的业务转化率增长7%;商家店铺搜寻CTR晋升5%,将间接影响拉动商家入住和广告营收;原文链接本文为阿里云原创内容,未经容许不得转载。

January 4, 2022 · 1 min · jiezi

关于elasticsearch:elasticsearch-ik-分词器处理不当的问题

一、参考elasticsearch 学习系列目录——更新ing elasticsearch analysis ik 分词时产生 NullPointerException Elasticsearch 中为什么会有大量文档插入后变成 deleted? 二、场景形容2.1 存在索引,然而文档 bulk 报错 2.2 查看索引统计信息 发现很多文档处于 deleted状态 三、起因探索3.1 首先须要定位什么场景,文档状态会是 deleted?通过调研, 操作阐明间接delete间接删除文档,文档状态会变为deleted更新文档update更新操作实质是删除旧文档,增加新的文档,也会产生deleted 状态的文档然而,程序中没有删除文档的操作? 3.2 是否因为资源有余,导致ES主动删除呢?查看集群资源,因为是新的集群,所以资源根本未应用,不存在资源缓和问题 3.3 因为咱们应用了ik分词器,那么是否是分词器的起因呢? 因为咱们设置了message 字段应用ik分词器,发现果然是分词器的起因 四、解决形式4.1 docker环境问题docker中如同通过 elasticsearch-plugin install <URL>形式装置分词器,会有问题 批改装置形式,下载对应版本的ik zip安装包,解压后,问题解决

December 22, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch进阶4-手动触发滚动

一、参考elasticsearch 学习系列目录——更新ing Elasticsearch基于Pipeline窗口函数实现实时聚合计算 Moving function aggregation

December 13, 2021 · 1 min · jiezi

关于elasticsearch:elk-stack安装教程

elasticsearch装置教程(linux_x86_64)wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.0-linux-x86_64.tar.gz# 增加新用户useradd elsearch# 创立一个soft目录,寄存下载的软件mkdir /soft# 进入,而后通过xftp工具,将刚刚下载的文件拖动到该目录下cd /soft# 解压缩tar -zxvf elasticsearch-7.9.1-linux-x86_64.tar.gz#重命名mv elasticsearch-7.9.1/ elsearchchown elsearch:elsearch /soft/ -Rcd /soft/elsearch/config#关上配置文件vim elasticsearch.yml #设置ip地址,任意网络均可拜访network.host: 0.0.0.0 # 勾销正文,并保留一个节点node.name: node-1cluster.initial_master_nodes: ["node-1"]http.cors.enabled: truehttp.cors.allow-origin: "*"http.cors.allow-headers: "*"在Elasticsearch中如果,network.host不是localhost或者127.0.0.1的话,就会认为是生产环境,会对环境的要求比拟高,咱们的测试环境不肯定可能满足,个别状况下须要批改2处配置,如下:# 批改jvm启动参数vim conf/jvm.options#依据本人机器状况批改-Xms128m -Xmx128m而后在批改第二处的配置,这个配置要求咱们到宿主机器上来进行配置# 到宿主机上关上文件vim /etc/sysctl.conf# 减少这样一条配置,一个过程在VMAs(虚拟内存区域)创立内存映射最大数量vm.max_map_count=655360# 让配置失效sysctl -p启动ElasticSearch su - elsearch# 进入bin目录cd /soft/elsearch/bin# 后盾启动./elasticsearch -d启动胜利后,拜访上面的URL$elsurl:9200/如果呈现了上面的信息,就示意曾经胜利启动了![image.png](/img/bVcWCa5)谬误剖析如果呈现上面的错误信息 java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:111) at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:178) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:393) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127) at org.elasticsearch.cli.Command.main(Command.java:90) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92)For complete error details, refer to the log at /soft/elsearch/logs/elasticsearch.log[root@e588039bc613 bin]# 2020-09-22 02:59:39,537121 UTC [536] ERROR CLogger.cc@310 Cannot log to named pipe /tmp/elasticsearch-5834501324803693929/controller_log_381 as it could not be opened for writing2020-09-22 02:59:39,537263 UTC [536] INFO Main.cc@103 Parent process died - ML controller exiting就阐明你没有切换成 elsearch用户,因为不能应用root操作es ...

December 10, 2021 · 2 min · jiezi

关于elasticsearch:elasticsearch插件2-压测工具-Rally-深入研究

一、参考elasticsearch 学习系列目录——更新ing Track 二、赛道 track2.1 定义一个赛道就是一个针对特定数据集的多个极限测试场景的汇合 一个赛道定义了相干的索引、数据流、数据文件以及这些数据的操作, 赛道的属性蕴含: 属性名称阐明索引、数据流 查问 源数据URL 操作步骤 2.2 创立一个git仓库保留赛道信息

December 10, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch插件2-压测工具-Rally

一、参考elasticsearch 学习系列目录——更新ing Rally 2.3.0 华为源python 二、装置2.1 装置python3.8 以上的python1. 装置依赖yum install gcc openssl-devel bzip2-devel libffi-devel -y2. 下载源码 (从华为源)3. 解压装置tar -zxvf Python-3.X.X.tgzcd Python-3.X.X && ./configure prefix=/usr/local/python3make && make install4. 创立软链接ln -s /usr/local/python3/bin/python3 /usr/bin/python3ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 2.2 创立虚拟环境python3 -m venv ~/work/env/python/py3source py3/bin/activate2.3 装置rallypip3 install esrally 根本应用

December 7, 2021 · 1 min · jiezi

关于elasticsearch:阿里云ES-openstore-调研

一、参考elasticsearch 学习系列目录——更新ing 通过OpenStore实现海量数据存储 OpenStore存储引擎介绍 二、根本介绍

December 3, 2021 · 1 min · jiezi

关于elasticsearch:Elasticsearch修改字段类型方案

Elasticsearch的mapings相当于数据库的表构造,在应用过程中能够新增和删除字段,然而不反对批改字段类型,能够通过以下四个步骤来实现创立新的指标index将源index的数据复制到指标index删除源index给指标index设置别名,别名为源index的名称。 或者再建一个名称为源index的指标index2,数据从指标index复制到指标index2上面举个例子 源index: my-index-order-1 蕴含两个字段: createTime: 下单工夫,类型:longorderNo: 订单号,类型:text以下操作都是在Kinbana的控制台中执行. PUT /my-index-order-1?pretty{ "mappings": { "properties": { "createTime": { "type": "long" }, "orderNo": { "type": "text" } } }}插入三条数据 PUT /my-index-order-1/_doc/1?pretty{ "createTime": 1637992973517, "orderNo": "7d7d5495-4db9-4513-a2c9-c5fb0454517e"}PUT /my-index-order-1/_doc/2?pretty{ "createTime": 1637993092000, "orderNo": "fb337ede-6e1d-4422-8e2b-453148064bba"}PUT /my-index-order-1/_doc/3?pretty{ "createTime": 1640585092000, "orderNo": "54ccb3a9-c168-487e-8594-893a2b7803bf"}需要剖析:把my-index-order-1的createTime字段类型从long类型批改成date类型1. 创立新的指标indexPUT /my-index-order-2?pretty{ "mappings": { "properties": { "createTime": { "type": "date" }, "orderNo": { "type": "text" } } }}2. 将源index的数据复制到指标indexreindex 命令能够实现两个index之间数据的拷贝, 两个index的mappings不同,只会拷贝相互兼容的数据。 如果复制的数据量比拟大,_reindex申请会超时,不要焦急,数据拷贝还在持续,能够通过GET _tasks?detailed=true&actions=*reindex命令查问正在执行的工作,GET _tasks/taskId:number查问某一个工作的执行详情。 reindex更多参数参考官网文档:https://www.elastic.co/guide/... POST _reindex{ "source": { "index": "my-index-order-1" }, "dest": { "index": "my-index-order-2" }}3. 删除源indexDELETE /my-index-order-1/ ...

November 27, 2021 · 1 min · jiezi

关于elasticsearch:elastic搜索

term查问term:查问某个字段里含有某个关键词的文档,terms:查问某个字段里含有多个关键词的文档term 和 terms 是 蕴含(contains) 操作,而非 等值(equals) (判断)英文不会去分词,中文会去分词应用ik分词器 + 扩大须要分词的中文第一步:https://github.com/medcl/elas...第二步:上传到/usr/local/elasticsearch-7.6.3/plugins第三步:重启elasticsearchmatch查问match:分词之后再按后果查问match_phrase:准确匹配,不会去分词multi_match:分词之后进行多字段匹配,其中一个字段有这个文档就满足

November 26, 2021 · 1 min · jiezi

关于ElasticSearch:Elasticsearch一键安装入门教程

Elasticsearch是一个开源的分布式、RESTful 格调的搜寻和数据分析引擎,它的底层是开源库Apache Lucene。 Lucene 能够说是当下最先进、高性能、全功能的搜索引擎库——无论是开源还是公有,但它也仅仅只是一个库。Elaticsearch是一个开源的高扩大的分布式全文检索引擎,它能够近乎实时的存储、检索数据;自身扩展性很好,能够扩大到上百台服务器,解决PB级别的数据。Elaticsearch也应用Java开发并应用Lucene作为其外围来实现所有索引和搜寻的性能,然而它的目标是通过简略的RESTful API来暗藏Lucene的复杂性,从而让全文搜寻变得简略。 上面咱们就来学习一下如何简略疾速的装置部署好Elasticsearch服务 1.找到Elasticsearch的装置服务可点击试用。 2.装置部署增加节点-抉择版本-填写参数-部署胜利 装置部署过程简略又疾速,具体的装置教程如下: 如何增加节点?https://www.bilibili.com/vide... 如何装置部署Elasticsearch?https://www.bilibili.com/vide...

November 16, 2021 · 1 min · jiezi

关于elasticsearch:为什么-elasticsearch-的-JDBC-要收费

应用 dbeaver 连贯 docker 中的 elasticsearch 产生了 current license is non-compliant for [jdbc] 谬误。 为什么应用 JDBC 连贯 elasticsearch 这么根底的性能都要免费呢? https://www.elastic.co/cn/sub...

November 13, 2021 · 1 min · jiezi

关于elasticsearch:ESSD技术解读04ESSD-Auto-PL规格引领IO性能弹性新方向

简介: 阿里云 ESSD 为云服务器 ECS 提供低时延、持久性和高牢靠的块存储服务,成为云厂商全闪块存储的业界标杆。存储团队推出了 ESSD Auto PL 新的云盘规格,把性能与容量解耦,提供 IO 性能按需供应两大要害个性。AutoPL 具备的灵活性和弹性能力升高了 IT 规模布局难度和因布局不当带来的危险,本文具体介绍了Auto PL 新产品个性、揭秘背地的技术原理。 前言作为 IaaS 最重要的外围组件之一,阿里云 ESSD 为云服务器 ECS 提供低时延、持久性和高牢靠的块存储服务,成为云厂商全闪块存储的业界标杆。随着越来越多的企业上云和外围利用上云,以及容器和 Serverless 架构的蓬勃发展,对块存储 IO 性能的弹性能力提出了新的挑战和需要。阿里云存储团队在这种背景下推出了 ESSD Auto PL 新的云盘规格,把性能与容量解耦,提供 IO 性能按需供应两大要害个性。本文联合块存储典型业务场景,介绍 Auto PL 新产品个性、揭秘背地的技术原理。 云存储的IO弹性需要和业务痛点随着云原生技术的倒退,越来越多的企业基于云计算的虚拟化、弹性扩大及蓬勃发展的云原生技术的分布式框架,容器技术、编排零碎、继续交付及疾速迭代,构建起大规模、弹性扩大强、丰盛的云上分布式业务场景;新的计算状态逐渐往短周期、轻量化等方向倒退,对块存储 IO 性能弹性提出了更多需要(性能通常用 IOPS :Input/Output Operations per Second 和吞吐 BPS :Bytes per Second 来形容),以下是比拟常见的业务痛点: VM/容器批量启动:计算实例启动时,系统盘短时间内耗费大量 IOPS 和吞吐 BPS业务顶峰:客户业务面临不可预期的突发场景,须要云盘以及 VM 具备短时的突发性能需求的弹性扩大能力周期性工作解决:OLAP/批处理在可预感的工夫内周期性的提交海量工作,须要云盘具备突发的弹性扩大能力传统的块存储产品采纳性能/容量耦合的产品设计,用户通过购买云盘容量获取相应的 IOPS/BPS 性能下限,通过云盘扩容同时取得磁盘容量和 IO 性能。ESSD 反对 PL0/1/2/3 多种性能的档位(PL:performance level),不同 PL 等级有不同 IO 性能下限,客户可通过云盘变配性能晋升 PL 等级,从而失去更高的 IOPS/BPS 性能下限。云原生业务充分利用云的弹性能力,业务需要上量有个较长的工夫周期,通常会预留局部存储性能余量。此外,相当局部云上业务流量存在显著的波峰波谷行为,大部分工夫处于业务低负载期,且业务高峰期和峰值难以精确预估。典型的 IO 流量突发型业务可能在肯定工夫内呈现一个或多个突发 IO 流量,突发工夫短、突发性能峰值高,常见于互联网秒杀等突发业务场景,对性能布局提出了新的挑战:如果性能配置预留过高,会造成日常资源的大量闲置节约;而如果性能预留有余,业务突发洪峰会造成业务受损。总而言之,通过云盘扩容/变配进行较为精准的性能布局变得十分艰难。 ...

October 31, 2021 · 2 min · jiezi

关于elasticsearch:ESSD技术解读03阿里云块存储企业级特性之异步复制

简介: 在大数据时代,数据就是企业的外围资产,是企业的生命线。在事实世界中,劫难时有发生,当产生劫难时,容灾能力成为企业是否生存的要害。云上容灾服务,通常称为 DRaaS(劫难复原即服务)岂但可能省去自建容灾核心的开销,还能节俭后续运维老本,帮忙客户疾速建设起跨地区的容灾计划,即买即用,随时开释的个性也为用户提供了极大的弹性。本文介绍了云上容灾产品状态,企业可联合本身特点抉择适合的容灾计划,针对异步复制产品解析了传统容灾与云上容灾的技术架构。阿里云块存储也联合本身架构特点实现了块存储的异步复制产品。 前言数据是企业的生命线数据异地容灾是企业级客户的一个普适需要,尤其是对于政府,金融等大客户,更是外围需要。在大数据时代,数据就是企业的外围资产,是企业的生命线。在事实世界中,劫难时有发生,当产生劫难时,容灾能力成为企业是否生存的要害。 在美国“911”事件中,美国的双子大楼倒塌,数家银行的数据中心因而毁于一旦。德意志银行,因为在几十公里外做了数据备份,很快复原了业务,失去用户的好评,而纽约银行因为没有灾备计划,在数月后开张。 21 年 3 月份,法国最大数据中心运营商 OVHcloud 机房着火,超 350 万网站受到影响。 在刚刚过来的郑州 720 旱灾中,郑州大学第一从属医院河医院区受到间断暴雨影响,整个院区淹水导致停电,医院启动了异地容灾机制,仅用 15 分钟就将外围业务紧急切换至东区外围机房,保障了其余两个院区的失常运行。 云上容灾成为趋势一个个实在案例警钟长鸣,这也使得企业对数据保护,容灾的投入不断扩大。传统的容灾计划,往往须要企业自建容灾核心,购买专线,以及投入人力进行运维等,投入老本较大。在云计算疾速倒退的时代,越来越多的企业客户思考云上容灾。云上容灾服务,通常称为 DRaaS(劫难复原即服务)岂但可能省去自建容灾核心的开销,还能节俭后续运维老本,帮忙客户疾速建设起跨地区的容灾计划,即买即用,随时开释的个性也为用户提供了极大的弹性。 下表中总结了 DRaaS 与传统容灾计划的比照,能够看出 DRaaS 与传统容灾相比具备零基建、少运维、高弹性的特点,因而,在云计算疾速倒退的时代,DRaaS 也成为容灾的趋势所在。 ESSD 云盘异步复制阿里云块存储 ESSD 产品是寰球当先的旗舰级产品,曾经逐步走向成熟。为了更好的服务企业客户,满足企业客户云上容灾需要,阿里云块存储也推出本人的 DRaaS 产品,云盘异步复制,实现云盘的跨地区异步复制。本文介绍了用户如何抉择适合的云上容灾产品,从技术角度解析了不同容灾架构的异同点,而后介绍针对 ESSD 架构咱们如何抉择容灾架构以及云盘异步复制背地的技术原理。 企业如何抉择云上容灾计划依据 RPO,RTO 抉择适合的容灾类型企业在抉择容灾计划时,首先应该依据本人的业务特点确定本人的容灾等级。在容灾畛域通常应用 RPO(Recovery Point Objective)来掂量一个容灾零碎最多可能失落的数据的时长,RTO(Recovery Time Objective),来掂量从劫难产生到整个零碎恢复正常所须要的最大时长。 国家出台了相干规范,把容灾能力分为六个等级,如下图所示 对于企业来说从一级到六级,级别越高,数据失落的危险越低,然而容灾建设的老本越高。在传统存储行业中,通常数据备份归档类产品能够满足一到二级容灾需要,一般存储阵列的备份性能能够满足三到五级需要,高端存储阵列的异步复制性能能够满足四到五级需要,而高端存储同步复制,双活性能,以及基于利用的复制能够满足五到六级需要。 那么对于云上,各大云厂商也提供了丰盛的云产品来满足不同的容灾级别需要,云上灾备核心通常提供跨地区或者跨可用区的云上灾备服务,能够满足一到四级的需要,而异步复制、同步复制产品能够满足五到六级容灾需要。支流的利用,例如数据库业务通常也有本人的容灾产品,最高能够做到 IO 级别的容灾粒度。 从下面的级别能够看出异步复制能够满足四到五级容灾需要,也是银行等金融客户以及政府单位等宽泛须要的。 依据零碎特点抉择适合的容灾服务从实现形式的角度来分类,现有云厂商的容灾计划大抵调配三类:基于利用、基于实例和基于块存储: 基于利用这类通常是针对某种特定的应用服务进行的容灾计划,例如云数据库,音讯队列,对象存储等,应用相干云服务的用户能够依据本人的须要抉择对应产品的容灾服务,这种容灾服务的劣势是联合业务往往可能做到利用级别的一致性,毛病是普适性不强,只有基于特定的利用的业务才能够应用。 基于云主机对于只购买了 IaaS 服务,或者有本人的定制化业务,又或者是利用级容灾服务不能满足需要的,能够抉择基于云主机的容灾计划,这种计划会做整机的数据一致性爱护,或者跨实例的数据一致性爱护,容灾端通常除了存储数据的复原,也进行主机网络的复原,应用起来比拟便捷,这种容灾服务长处是操作简略,普适性强,毛病是在容灾端也须要买好主机资源,老本绝对较高。 基于块存储(云盘)容灾的外围是数据容灾,因而也有局部厂商针对云盘自身推出跨地区复制产品,这种产品模式比拟灵便,对利用个别没有限度,复制期间不须要容灾端购买主机,能够升高用户老本,也能够无缝与其余云服务搭配应用,造成利用级容灾相似的成果。同样基于云盘能够做一致性组,对一组云盘的复制数据满足解体一致性语义。 ESSD云盘异步复制,简略几步帮你搞定业务复原云盘异步复制性能反对 ESSD 产品跨 Region(地区)进行云盘数据的异步复制,RPO 为 15 分钟。用户仅须要简略 3 步就能够实现一个容灾对的创立:首选抉择须要复制的云盘,第二抉择容灾站点并创立从盘,第三创立容灾对并激活容灾对。容灾对激活后云盘数据就会周期性复制到容灾站点对应的从盘上了,当用户想临时进行复制时,能够应用容灾对的进行性能来临时终止复制。 当故障产生时,用户能够应用故障切换性能,实现主备站点的切换,故障切换会断开复制链路,并使得从端设施复原到上一个复制的一致性点,提供给用户可读可写权限。 当劫难复原后,用户想将业务复原到原有生产站点,能够应用反向的复原性能,将从站点产生的增量数据恢复回主站点。 ...

October 31, 2021 · 1 min · jiezi

关于elasticsearch:ESSD技术解读02企业级利器阿里云-NVMe-盘和共享存储

简介: 以后 NVMe 云盘联合了业界最先进的软硬件技术,在云存储市场,独创性同时实现了 NVMe 协定 + 共享拜访 + IO Fencing 技术。它在 ESSD 之上取得了高牢靠、高可用、高性能,同时基于 NVMe 协定实现了丰盛的企业个性,如多重挂载、IO Fencing、加密、离线扩容、原生快照、异步复制等性能。本文具体介绍了云上SAN和NVMe的倒退历程,并做出了对将来的构想。 7x24 高可用是怎么炼成的?事实世界中单点故障是常态,确保故障下业务连续性是高可用零碎的外围能力,那么在金融、保险、政务等要害利用中,如何保障业务 7*24 高可用?通常来讲,业务零碎由计算、网络、存储组成,在云上,网络多路径和存储分布式确保了稳固高可用,但要实现业务全链路高可用,还要解决计算和业务侧单点故障。以常见的数据库为例,单点故障导致业务进行对于用户难以承受,那么,当断电、宕机、硬件故障等导致实例不可服务时,如何疾速复原业务? 不同场景的解决方案有所不同,MySQL 通常搭建主从/主备架构实现业务高可用,主库故障时切换到备库继续对外提供服务。但实例切换后,如何保障主从库数据的一致性?依据业务对数据失落的容忍度,MySQL 通常采纳同步或异步形式进行数据复制,由此引入额定的问题:局部场景下导致数据缺失、同步数据影响零碎性能、业务扩容要新增整套设施并进行全量数据复制、主备切换工夫较长影响业务连续性等。能够看到,为了搭建高可用零碎,架构将变得复杂,且很难兼顾可用性、可靠性、扩展性、老本、性能等,那么是否有更加先进的计划,兼得鱼和熊掌?答案必须是:Yes! 图1:数据库的高可用架构 通过共享存储,不同数据库实例间可共享同一份数据,从而通过计算实例的疾速切换取得高可用(图1),Oracle RAC、AWS Aurora、阿里云 PolarDB 数据库就是其中的代表。这里的关键在于共享存储,传统 SAN 价格昂扬,扩缩容麻烦,机头也容易成为瓶颈,其应用门槛较高对用户并不敌对,有没有更好、更快、更省的共享存储,来解决用户的痛点呢?阿里云最近推出的 NVMe 云盘和共享个性,将充沛满足用户的诉求,接下来咱们将重点介绍。这里给大家抛出一个问题,在实例切换过后,如果原库仍在写入数据,如何保证数据正确性?卖个关子,读者能够先思考下。 图2:主从切换场景的数据正确性问题 历史后退的车轮:云上 SAN 和NVMe咱们已步入“数据石油”的数字经济时代,云计算、人工智能、物联网、5G 等技术的疾速倒退,促使数据的爆炸式增长。从 IDC 2020 年报告能够看出,寰球数据规模逐年增长,2025 年将达到 175 ZB,数据将次要集中在公共云和企业数据中心。数据的快速增长,为存储的倒退提供了新的能源和要求,让咱们回顾下块存储状态是如何一步步演进的。 图3:块存储状态演进 DAS:存储设备采纳直连形式(SCSI、SAS、FC 等协定)与主机连贯,零碎简略、易于配置管理、费用较低,因为存储资源无奈被充分利用和共享,难以做到集中统⼀的治理和保护。 SAN:通过专用网路连贯存储阵列和业务主机,解决了对立治理和数据共享等问题,并实现高性能低提早的数据拜访,不过 SAN 存储价格昂贵、运维简单、可扩展性差,进步了用户的应用门槛。 全闪:底层存储介质的反动和老本的降落,标记着全闪存时代的到来,从此存储性能转移到软件栈,迫使软件进行大规模的改革,促成了用户态协定、软硬一体化、RDMA 等技术的高速倒退,带来了存储性能的飞越。 云盘:云计算的高速倒退历程中,存储转移到云上,云盘具备天生的长处:灵便、弹性、易用、易扩大、高牢靠、大容量、低成本、免运维等,在数字化转型历程中成为存储松软的底座。 云上 SAN:为全方面反对存储业务,取代传统的 SAN 存储,云上 SAN 应时代而生,它继承了云盘的诸多劣势,也具备了传统 SAN 存储能力,包含共享存储、数据保护、同步/异步复制、极速快照等个性,必将在企业存储市场继续发光发热。 另一端,在存储协定的演进上,NVMe 正在成为新时代的宠儿。 图4:存储协定的演进 SCSI/SATA:存储远古时代,硬盘多为低速设施,数据通过 SCSI 层和 SATA 总线传输数据,性能受限于存储慢速介质,如机械硬盘,覆盖了 SATA 单通道和 SCSI 软件层的性能劣势。 ...

October 31, 2021 · 2 min · jiezi

关于ElasticSearch:记一次-Elasticsearch-异常

公司我的项目用到ES智能检索 搜寻数据时每页10条数据 在页数超过1000页时报错 因为不是很懂ES在网上翻阅一些材料发现 因为es默认的查问最大条数为10000条 达到1000页时条数达到10000条所以才报这个错 在kibana索引治理中能够很间接的看到以后索引的配置 利用kibana控制台 批改对应索引的最大条数 解决条数超过后无奈查到数据的问题 PUT /search_table/_settings{ "index" : { "max_result_window" : 200000}} 将最大条目数调整至200000 胜利解决了这个问题

October 28, 2021 · 1 min · jiezi

关于elasticsearch:es集群搭建步骤及解决es集群无法形成的问题

搭建es集群时,批改或增加elasticsearch.yml配置如下:cluster.name: geingo-elasticsearchnode.name: es-node1path.data: /usr/local/elasticsearch-7.15.0/datapath.logs: /usr/local/elasticsearch-7.15.0/logsnetwork.host: 0.0.0.0http.cors.enabled: truehttp.cors.allow-origin: "*"node.master: truenode.data: truediscovery.seed_hosts: ["192.168.36.9","192.168.36.10","192.168.36.11"]cluster.initial_master_nodes: ["es-node1"]注意事项:在三台服务器中,cluster.name需保持一致,node.name每台则须要批改(如es-node1、es-node2),其余配置根本放弃不变即可。 配置实现后此时别离在三台服务器中启动es,发现每个节点都可能单独拜访胜利,可能拜访9200端口,但无奈造成集群。 查看logs/elasticsearch.log文件后,发现集群须要ping通9300端口,然而如果是单节点部署,只须要凋谢9200接口即可。 在凋谢三台服务器的9300端口后,三台es服务器胜利造成集群。 随后通过百度理解到es这两个端口的区别:9200用于内部通信,基于http协定,程序与es的通信应用9200端口。9300jar之间就是通过tcp协定通信,遵循tcp协定,es集群中的节点之间也通过9300端口进行通信。 总结:如果是单节点的es,则凋谢9200端口即可,如果须要部署es集群,则须要同时凋谢9300端口作为他们之间的通信。

October 14, 2021 · 1 min · jiezi

关于elasticsearch:Elasticsearch-存储成本省-60稿定科技干货分享

背景稿定科技旗下稿定设计产品是一个聚焦商业设计的多场景在线设计平台,突破了软硬件间的技术限度,会集创意内容与设计工具于一体,为不同场景下的设计需要提供优质的解决方案,满足图片、视频等全类型媒介的设计需要,让设计更简略。 稿定科技应用 Elasticsearch(下文中简称为 ES) 作为日志检索组件,随着业务量的增长,每天有 2T 左右的新增数据,须要保留 15~30 天,给磁盘和零碎带来了不小的压力。在 ES 中为了保障日志的写入和查问的性能,大多应用单位存储老本更高的高性能云盘。然而,在理论的业务场景中,超过 7 天的数据仅作低频应用,全副存储在高性能云盘必然会导致过高的老本和空间的节约。 计划Elasticsearch 7.10 版本推出了索引生命周期概念,开始反对数据分层存储,能够指定不同节点应用不同的磁盘介质来辨别冷热数据,比方应用 HDD 磁盘来存储温冷数据,能取得更大的应用空间和更低的老本。这个个性非常适合日志索引场景。 在温冷数据的存储介质上,应用 JuiceFS 代替 HDD 磁盘,相当于取得了有限容量的存储空间。通过 ES 的索引生命周期治理,能够主动实现索引的创立 - 迁徙 - 销毁整个生命周期治理,无需手工干涉。 在咱们的实际中,首先将 ES 集群降级到目前最新的 7.13 版本。而后拆分冷热节点,热节点优先思考性能,冷节点优先思考存储的容量和老本。同时,调整索引和模板形式,配置数据生命周期、索引模板和数据流,实现索引数据写入。 调整后整个索引的流转如下图所示: 在索引创立时,配置 index.routing.allocation.require.box_type:hot 进行节点筛选;期待索引进入 warm 周期时,调整 index.routing.allocation.require.box_type:warm,并迁徙到 warm 节点后,数据进入冷节点存储,理论存储于 JuiceFS 中;期待索引进入 delete 周期时,ES 会主动把索引数据删除。 客户收益计划中应用的 JuiceFS 是什么呢? JuiceFS 是一款面向云环境设计的企业级分布式文件系统。提供齐备的 POSIX 兼容性,为利用提供一个低成本、空间有限的共享文件系统。应用 JuiceFS 存储数据,数据自身会被长久化在对象存储(例如,Amazon S3、阿里云 OSS 等),联合 JuiceFS 的元数据服务来提供高性能文件存储。JuiceFS 在寰球私有云服务中都提供有全托管服务,只需点点鼠标,十分钟配置好。同时 JuiceFS 在 2021年初在 GitHub 开源,受到寰球开发者的关注和参加,目前曾经取得 3700+ stars。 ...

October 13, 2021 · 2 min · jiezi

关于ElasticSearch:躬行系列ElasticSearch集群部署

版本抉择CentOS7.6java version "1.8.0_221"elasticsearch-7.13.3 下载地址百度官网即可 部署细节java环境疏忽解压缩...因为平安问题,Elasticsearch 不容许 root 用户间接运行,所以要创立新用户 useradd espasswd eseses批改目录归属用户及用户组 chown -R es:es /usr/local/elasticsearch-7.13.3批改配置文件vim elasticsearch.yml退出如下配置 cluster.name: elasticsearchnode.name: node-1network.host: 0.0.0.0http.port: 9200cluster.initial_master_nodes: ["node-1"]为了es的失常应用,须要批改一些零碎的配置文件 vim /etc/security/limits.confes soft nofile 65536es hard nofile 65536vim /etc/security/limits.d/20-nproc.confes soft nofile 65536es hard nofile 65536vim /etc/sysctl.confvm.max_map_count=655360#从新加载sysctl -p启动须要切换到es用户su es 常用命令

October 12, 2021 · 1 min · jiezi

关于elasticsearch:给Zblogphp插上Elasticsearch的翅膀

给Zblogphp插上Elasticsearch的翅膀找遍了zblog的利用核心,未发现有应用Elasticsearch搜索引擎的插件。国庆闲来无事,依据zblogphp的机制,开发了一个基于Elasticsearch的插件。 本插件应用简略,须要有一个Elasticsearch7.x的环境(基于7.x版本开发),Elasticsearch 装置IK、pinyin,中文简繁體转换 插件。装置好该插件后,只须要配置好账号密码,点击创立索引模板即可。公布和编辑文章时,会主动依据索引模板,创立post索引,同步文章数据。搜寻时,间接接管原有的搜寻逻辑,无需调整程序和模板。 后盾配置截图: 配置好连贯,端口,账号和明码,点击“测试连贯”,弹出连贯胜利,展现版本号,即可点击保留配置,如果这4项谬误,连贯不上Elasticsearch,获取不到ES的版本号,将无奈保留配置。 看到这个提醒,便能够点击“放弃配置”。这里有一项“切换搜寻 Elasticsearch”,开启,前端搜寻即切换到了Elastisearch搜索引擎。 在配置好了根本设置当前,点击索引模板,能够预览到索引模板,点击“创立索引模板”,即可在Elasticsearch服务器创立好索引模板,胜利后,会在阐明栏展现绿色的“已创立”,如果未创立,展现红色的“未创立”。公布和编辑文章时,会依据该索引模板,主动创立好索引,同步文章。 以下是搜寻成果截图:

October 9, 2021 · 1 min · jiezi

关于elasticsearch:全文检索elasticsearch入门看这篇就够了

一、elasticsearch介绍1、背景在订单管理系统中,订单查问的调用量都十分大,如果间接查询数据库,那数据库的压力可想而知,而且有时须要执行一些简单的查问,sql 并不可能敌对的反对,须要查问很多张表。再比方用户手误输出的关键词错了或存在错别字,那应用 sql 是无奈搜寻到。所以打算应用 Elasticsearch 来承载订单查问的次要压力。 总的来说,应用 elasticsearch,以下简称es 的几个起因如下 关系型数据库在进行含糊(%关键字%)搜寻的时候,会全表扫描,查问十分慢关系型数据库在关键字搜寻时,并不反对全文分词搜寻,比方用户本打算搜寻:公众号-臻大虾,却手误:公号-臻大虾,es 能够依据分词的后果搜寻出想要的后果。在数据分析、日志剖析上用到 es2、es 基本概念Elasticsearch 是一个分布式、RESTful 格调的搜寻和数据分析引擎,实用于包含文本、数字、天文空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的根底上开发而成,由 Elasticsearch N.V.(即当初的 Elastic)于 2010 年首次公布。 Elasticsearch 是文件存储,Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档,用 JSON 作为文档序列化的格局,比方上面这条用户数据: {    "name":"臻大虾",    "sex":0,    "age":24}3、es 劣势分布式:横向可扩展性,减少服务器可间接配置在集群中高可用:提供了复制性能,具备容错机制,能主动发现新的或失败的节点,重组和从新均衡节点数据实时性:数据进入 es,可达到近实时搜寻Restful api:json 格局的 RESTful 格调全文检索:基于 lucene 的弱小的全文检索能力4、应用场景全文检索 当咱们应用百度搜寻、谷歌搜寻时,输出关键字,就能搜寻到最相干的文章,这就是利用了 es 弱小的全文检索的能力。 用户行为 平时淘宝买货色时,你是否发现举荐的商品跟你最近搜寻的关键词很享受,这就是通过收集用户的行为日志,剖析并建设用户模型,保留在 es 中,并利用 es 弱小的深刻搜寻和聚合的能力,能够更好的剖析和展现用户的行为数据。例如举荐零碎,就是利用用户模型的用户数据,对用户数据穿插查问,剖析出用户细粒度的爱好。 监控零碎 利用 es 高性能查问的个性,收集零碎的监控数据,近实时展示监控数据,同时也不便用户对监控数据进行关键字排查。 日志零碎 罕用的计划是 ELK(elasticsearch+logstash+kibana),利用 logstash 去收集 logback 的日志信息,再通过 es 做存储,最初能够再 kibana 去利用 es api 查看和剖析日志的相干信息。 5、es 的外围概念索引(index) 索引是 es 最大的数据单元,相似于关系型数据库中的库,是多个类似文档的汇合。每个索引有一个或多个分片,每个分片有多个副片。 ...

September 25, 2021 · 2 min · jiezi

关于elasticsearch:如何安装部署Elasticsearch

Elasticsearch 是一个分布式、高扩大、高实时的搜寻与数据分析引擎。它能很不便的使大量数据具备搜寻、剖析和摸索的能力。充分利用Elasticsearch的程度伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理次要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词后果一并存入数据,当用户搜寻数据时候,再依据权重将后果排名,打分,再将返回后果出现给用户。Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的剖析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。Elasticsearch能够用于搜寻各种文档。它提供可扩大的搜寻,具备靠近实时的搜寻,并反对多租户。Elasticsearch是分布式的,这意味着索引能够被分成分片,每个分片能够有0个或多个正本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再均衡和路由是主动实现的。相干数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创立了索引,就不能更改主分片的数量。Elasticsearch应用Lucene,并试图通过JSON和Java API提供其所有个性。它反对facetting和percolating,如果新文档与注册查问匹配,这对于告诉十分有用。另一个个性称为“网关”,解决索引的长期持久性;例如,在服务器解体的状况下,能够从网关复原索引。Elasticsearch反对实时GET申请,适宜作为NoSQL数据存储。上面咱们就来学习一下如何简略疾速的装置部署好Elasticsearch服务1.找到Elasticsearch的装置服务可点击试用。 2.装置部署增加节点-抉择版本-填写参数-部署胜利 装置部署过程简略又疾速,具体的装置教程如下:如何增加节点?https://www.bilibili.com/vide...如何装置部署Elasticsearch?https://www.bilibili.com/vide...

September 23, 2021 · 1 min · jiezi

关于elasticsearch:es常见查询

多条件查问1.关键词:"china"2.公布工夫:"2021-09-13 00:00:00","2021-09-22 13:42:27"3.排除站点:aol.com4.排除国建:中国-CHN GET /new*/_count{ "query":{ "bool":{ "must":[ { "term":{ "text":{ "value":"china" } } },{ "term": { "mediaLevel": { "value": "5" } } } ], "must_not": [ { "term": { "countryCode": { "value": "CHN" } } }, { "term": { "domain": { "value": "aol.com" } } } ], "filter":{ "range":{ "pubTime":{ "gte":1631462400000, "lte":16322893470007 } } } } }}

September 22, 2021 · 1 min · jiezi

关于elasticsearch:ubuntu-安装-ElasticSearch

前置条件本环境默认是在Ubuntu21.04上操作的。Elastic PGP 公钥和源在装置之前咱们须要下载和装置公钥,否则没有方法应用 apt 装置 Elasticsearch 。 wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -增加源: sudo apt-get install apt-transport-httpsecho "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list装置 Elasticsearch接下来,咱们就能够更新源毕竟切装 Es 了: sudo apt-get update && sudo apt-get install elasticsearch这样就装置好了。 Elasticsearch 命令治理咱们能够应用 systemd 形式进行 Elasticsearch 进行治理 systemd设置开机启动: sudo systemctl daemon-reloadsudo systemctl enable elasticsearch启动: sudo systemctl start elasticsearch敞开: sudo systemctl stop elasticsearch检测是否装置胜利:首先咱们要执行命令将其启动(如果曾经启动了,那就不必执行上面的启动命令了): sudo systemctl start elasticsearch而后执行以下命令: curl -XGET '127.0.0.1:9200/?pretty'如果返回的数据如下所示,即示意装置胜利了: { "name" : "baoguoxiao", "cluster_name" : "elasticsearch", "cluster_uuid" : "UZwxDDZUTaWYXTe6g--9MQ", "version" : { "number" : "7.14.1", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "66b55ebfa59c92c15db3f69a335d500018b3331e", "build_date" : "2021-08-26T09:01:05.390870785Z", "build_snapshot" : false, "lucene_version" : "8.9.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search"}留神: Elasticsearch 须要启动一会。如果启动实现立马执行下面的命令,能够会提醒回绝连贯,多试几次就好了。配置 ElasticsearchElasticsearch 默认状况下从 /etc/elasticsearch/elasticsearch.yml 文件中加载它的配置。 ...

September 19, 2021 · 1 min · jiezi

关于elasticsearch:docker-安装-elasticsearch

参考文章:Docker下装置ElasticSearch和Kibana Docker 装置 ElasticSearch

September 14, 2021 · 1 min · jiezi

关于elasticsearch:ES添加新字段

背景为了业务须要,es存储数据须要增加字段: es版本是7.13.x 内容进行字段迁徙时候,须要依照要求批改对应的模板:template、索引mapping。 模板批改查问对应模板:GET /_template/template_name批改模板PUT /_template/template_name{ // 这里是从之前检索到的索引的具体信息}在对应模块下增加: ,"sourceWeight" : { "store" : true, "type" : "integer"},"imgPaths" : { "store" : true, "type" : "keyword"},"filePaths" : { "store" : true, "type" : "keyword"},"extra" : { "store" : true, "type" : "keyword"}mapping批改查问索引mapping GET /test_tr_01/_mapping批改索引mappingPUT /test_tr*/_mapping{ //具体mapping信息}

September 8, 2021 · 1 min · jiezi

关于ElasticSearch:Elasticsearch可观测最佳实践分享3分钟带你快速入门

简介Elasticsearch提供了许多指标,能够帮忙您检测故障迹象并在遇到不牢靠的节点,内存不足的谬误以及较长的垃圾收集工夫等问题时采取措施。须要监督的几个要害畛域是: 集群运行状况和节点可用性主机的网络和零碎搜寻性能指标索引性能指标内存应用和GC指标资源饱和度和谬误场景视图 ElasticSearch场景视图 内置视图 ElasticSearch内置视图 前置条件已装置 DataKit DataKit装置文档 配置监控指标采集进入 DataKit 装置目录下的 conf.d/db 目录,复制 elasticsearch.conf.sample 并命名为 elasticsearch.conf。示例如下: [[inputs.elasticsearch]] ## specify a list of one or more Elasticsearch servers # you can add username and password to your url to use basic authentication: # servers = ["http://user:pass@localhost:9200"] servers = ["http://localhost:9200"] ## Timeout for HTTP requests to the elastic search server(s) http_timeout = "5s" ## When local is true (the default), the node will read only its own stats. ## Set local to false when you want to read the node stats from all nodes ## of the cluster. local = true ## Set cluster_health to true when you want to also obtain cluster health stats cluster_health = true ## Adjust cluster_health_level when you want to also obtain detailed health stats ## The options are ## - indices (default) ## - cluster # cluster_health_level = "cluster" ## Set cluster_stats to true when you want to also obtain cluster stats. cluster_stats = true ## Only gather cluster_stats from the master node. To work this require local = true cluster_stats_only_from_master = true ## Indices to collect; can be one or more indices names or _all indices_include = ["_all"] ## One of "shards", "cluster", "indices" indices_level = "shards" ## node_stats is a list of sub-stats that you want to have gathered. Valid options ## are "indices", "os", "process", "jvm", "thread_pool", "fs", "transport", "http", ## "breaker". Per default, all stats are gathered. node_stats = ["jvm", "http","indices","os","process","thread_pool","fs","transport"] ## HTTP Basic Authentication username and password. # username = "" # password = "" ## Optional TLS Config # tls_ca = "/etc/telegraf/ca.pem" # tls_cert = "/etc/telegraf/cert.pem" # tls_key = "/etc/telegraf/key.pem" ## Use TLS but skip chain & host verification # insecure_skip_verify = false重新启动datakit失效 ...

September 6, 2021 · 3 min · jiezi

关于ElasticSearch:Elasticsearch入门教程

全文搜寻属于最常见的需要,开源的 ElasticSearch (以下简称ElasticSearch )是目前全文搜索引擎的首选。它能够疾速地贮存、搜寻和剖析海量数据。维基百科、Stack Overflow、Github 都采纳它。 ElasticSearch 的底层是开源库 Lucene。然而,你没法间接用 Lucene,必须本人写代码去调用它的接口。ElasticSearch是 Lucene 的封装,并提供了REST API的操作接口,开箱即用。 一、 装置ES装置之前咱们须要在机器上装置好Java的环境,版本1.8及以上,设置好对应的环境变量,如JAVA_HOME等环境变量1. Windows下装置ElasticSearchElasticSearch的下载 ElasticSearch的下载咱们能够在官网下载页面进行下载。 咱们抉择Windows版本,而后点击下载。抉择适合的地位进行解压而后咱们进入目录下的bin目录,双击elasticsearch.bat文件,稍作期待就会启动胜利验证是否装置胜利,拜访localhost:9200 而后就会显示一段JSON数据 {"name": "DESKTOP-FA293","cluster_name": "elasticsearch","cluster_uuid": "RjFufEo9STqFwASurQWF_A","version": { "number": "7.14.0", "build_flavor": "default", "build_type": "zip", "build_hash": "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1", "build_date": "2021-07-29T20:49:32.864135063Z", "build_snapshot": false, "lucene_version": "8.9.0", "minimum_wire_compatibility_version": "6.8.0", "minimum_index_compatibility_version": "6.0.0-beta1"},"tagline": "You Know, for Search"}

September 3, 2021 · 1 min · jiezi

关于elasticsearch:ElasticSearch-IK-分词器快速上手

简介: ElasticSearch IK 分词器疾速上手 一、装置 IK 分词器1.调配伪终端我的 ElasticSearch 是应用 Docker 装置的,所以先给容器调配一个伪终端.之后就能够像登录服务器一样间接操作docker 中的内容了docker exec -it 容器ID /bin/bash 2.应用 elasticsearch-plugin 装置插件cd plugins进入到 plugins 文件夹执行如下命令,7.12.0 须要批改成你的 es 版本号 ../bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.0/elasticsearch-analysis-ik-7.12.0.zip3.重启 elasticsearch 容器docker restart 容器ID 4.常见问题(1)java.lang.IllegalStateException 执行elasticsearch-plugin install的时候,呈现了 Failed installing和java.lang.IllegalStateException 查看了一下,我的 plugins/ 目录下曾经有一个名为 ik 的文件夹了.抱着试试的心态,删掉了这个名为 ik 的文件夹,从新执行 ../bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.0/elasticsearch-analysis-ik-7.12.0.zip装置胜利 二、ik 分词原理(占位,等有工夫读源码再来补充) 三、ik_smart 和 ik_max_wordGET _analyze?pretty{ "analyzer": "ik_smart", "text": "不像我,只会疼爱鸽鸽"} GET _analyze?pretty{ "analyzer": "ik_max_word", "text": "不像我,只会疼爱鸽鸽"} 论断 _analyzer构建索引时候的分词,索引的时候应用 max_wordsearch_analyzer搜寻时的分词,查问的时候应用 smart原文链接本文为阿里云原创内容,未经容许不得转载。

September 1, 2021 · 1 min · jiezi

关于elasticsearch:elasticSearch简单入门

装置# 新建docker-elasticsearch目录$ mkdir docker-elasticsearch# 进入docker-elasticsearch目录$ docker-elasticsearch# 新建config文件夹并批改权限$ mkdir config && chmod 777 -R config# 新建data文件夹$ mkdir data && chmod 777 -R data# 写入配置到config目录下的elasticsearch.yml中$ echo "http.host: 0.0.0.0" >> config/elasticsearch.yml编写docker-compose.yml文件version: '3'services: elasticsearch: image: elasticsearch:7.10.1 container_name: elasticsearch restart: always ports: - 9200:9200 - 9300:9300 environment: - "ES_JAVA_OPTS=-Xms64m -Xmx128m" - discovery.type=single-node volumes: - ./config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./data:/usr/share/elasticsearch/data - ./data/plugins:/usr/share/elasticsearch/data/plugins装置好了当前在浏览器输出HOST:9200, 显示以下界面, 阐明装置胜利了 装置kibanaversion: '2'services: kibana: container_name: kibana image: kibana:7.10.1 ports: - "5601:5601" restart: always environment: - ELASTICSEARCH_HOSTS=http://192.168.4.5:9200elasticsearch基本操作插入数据(PUT, POST)PUT /account/_doc/1{ "name": "Felix", "age": 18, "company": [ { "name": "BFKJ", "address": "LIUZHOU" }, { "name": "aliyun", "address": "hangzhou" } ]}// 该办法不须要指定id, 会默认生成一个随机idPOST user/_doc{ "name": "Felix", "company": "bfkj"}// 没有数据就插入, 有数据就报错POST user/_create/1{ "name": "Felix", "company": "bfkj"}获取数据

September 1, 2021 · 1 min · jiezi

关于elasticsearch:eskibana-ikAnalyzer安装及配置

docker中装置es和kibana(mac)cd /usr/local/opt/docker/mkdir escd esvim docker-compose.yml# 后盾启动利用docker-compose up -d# docker-compose.ymlversion: '3.8'services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:6.8.18 # 默认的重启策略,在任何状况下都不会重启容器。 restart: "no" container_name: elasticsearch ports: - 9200:9200 kibana: image: docker.elastic.co/kibana/kibana:6.8.18 restart: "no" container_name: kibana ports: - 5601:5601 environment: - elasticsearch_url=http://localhost:9200 # 以依赖性程序启动服务。在以下示例中,先启动 elasticsearch,才会启动kibana depends_on: - elasticsearch在浏览器中输出服务器ip:9200端口,呈现以下信息,示意es装置胜利 拜访kibana: http://localhost:5601/ 装置ikAnalyzer尝试去用kibana做一个分词查问,发现默认反对英文分词,不反对中文分词,所以须要装置中文分词器:ikAnalyzer # ElasticSearch 是装置在Docker中的,要先进入Docker容器docker exec -it 容器id bash# 应用 elasticsearch-plugin 装置;要和ElasticSearch版本保持一致 否则会无奈启动./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.18/elasticsearch-analysis-ik-6.8.18.zip# 退出容器并重启exitdocker-compose restart其余下载方式:https://github.com/medcl/elas...

August 31, 2021 · 1 min · jiezi

关于elasticsearch:Elasticsearch-监控指标接入Prometheus

一、在ES集群中的每个节点(master、data、coordinate)部署elasticsearch exporter;1、下载exporter:https://github.com/prometheus...2、如果ES集群有用户明码鉴权性能,创立一个专用于监控的remote_monitoring_user用户,此用户role权限包含:remote_monitoring_agent、remote_monitoring_collector,如果ES集群没有用户明码鉴权,且平安评估OK的话,则不须要专门创立监控用户。 3、解压并启动exporter: # 解压exporter安装包tar -zxf elasticsearch_exporter-1.2.1.linux-amd64.tar.gz # 应用后盾启动的形式启动exporter,在此假如ES节点是192.168.32.128:9200nohup /path/elasticsearch_exporter --web.listen-address=192.168.32.128:9114 --es.uri=http://remote_monitoring_user:xxxxxx@192.168.32.128:9200 & (有remote_monitoring_user用户明码测验)nohup /path/elasticsearch_exporter --web.listen-address=192.168.32.128:9114 --es.uri=http://192.168.32.128:9200 & (无remote_monitoring_user用户明码测验)

August 31, 2021 · 1 min · jiezi

关于elasticsearch:ElasticSearch-安装采坑

下载最新版的ElasticSearch,地址在 https://www.elastic.co/cn/dow...,不过我装的不是最新版的,我装的是6.4.3 这里有一个坑,不要在装在root用户下,我是在一个测试服务器上玩的,间接装在root下了,导致前面启动不了,前面又卸载从新装的或者你挪动到非root目录中应该也能够 我这里装在/home/elk目录下的 进入目录:cd home创立elk文件夹:mkdir elk下载安装包:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz解压:tar -zxvf elasticsearch-6.4.3.tar.gz弄完了如下: 解压后在config目录下有一个elasticsearch.yml文件,在最初面退出上面几行 vim config/elasticsearch.ymlnetwork.host: 0.0.0.0http.port: 9200http.cors.enabled: truehttp.cors.allow-origin: "*"好了,搞定,启动下 想多了,这个时候会报错, 这个官网给了阐明https://www.elastic.co/guide/...,就是说不倡议应用root启动es,这会绕过其余平安层在你的服务器上间接任何操作,这时es会回绝应用root用户启动 那咱们就创立一个新的用户组和用户 groupadd elsearchuseradd elsearch -g elsearch -p elasticsearch而后把elasticsearch文件夹以及子文件都设置为下面的用户组和用户chown -R elsearch:elsearch elasticsearch-6.4.2在尝试启动 又报了这个max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] why? 说啥每个过程最大同时关上文件数太小,可通过ulimit -Hn查看以后配置 批改/etc/security/limits.conf文件,减少以下配置 * soft nofile 65536* hard nofile 131072下面的星是要带的哦,*是所有用户的意思,保留后退出从新登录能力失效 更改后重新启动 胜利了,欧耶 http://you ip:9200

August 25, 2021 · 1 min · jiezi

关于elasticsearch:Elasticsearch-再发数据泄露事件190-万条-JSON-记录竟是恐怖分子观察名单

FBI 恐怖分子名单遭泄露FBI 治理的 190 万恐怖分子察看名单正本在 2021 年 7 月 19 日至 8 月 9 日期间在网上曝光了三周,其中包含秘密的 "禁飞"记录。 2003 年 FBI 为应答相似 9/11 恐怖袭击,遂创立恐怖分子筛查核心 (TSC)。 TSC 收集了大量“已知或正当狐疑参加恐怖活动”的人员姓名和集体详细信息,其中包含包含国籍、性别、出生日期、护照号码、发行国、禁飞指示灯,并将其存储在联邦调查局治理的数据库中。 平安公司 Security Discovery 的网络威逼情报总监 Bob Diachenko 示意,他在 7 月 19 日发现了被曝光的数据库,这个数据库寄存在领有巴林 IP 地址的服务器上,而不是在美国。同一天,Bob Diachenko 向美国疆土安全部(DHS)报告了数据泄露。大概三周后,即 2021 年 8 月 9 日,被曝光的服务器下线。 “裸露的 Elasticsearch 集群蕴含 190 万条记录,”Diachenko 说。“我不晓得它存储了多少残缺的 TSC 监督列表,但整个列表被曝光仿佛是正当的。” 被曝光的服务器被搜索引擎 Censys 和 ZoomEye 收录,这表明 Bob Diachenko 可能不是惟一接触到该名单的人。 该数据库由 FBI 治理,同时还向其余几个美国政府机构提供拜访权限,包含美国国务院、国防部、运输安全局、海关和边陲保护局等,甚至是一些国内执法机构。 尽管该数据库蕴含可疑恐怖分子的数据,但它在风行文化中也被称为美国禁飞名单,次要由美国当局和国际航空公司用于决定是否容许人员进入美国或在其领土内旅行,以及评估他们从事其余各种流动的危险。 目前尚不分明泄露起源,是从 FBI 的数据库间接泄露,还是从他的领有拜访权限的机构零碎中泄露进来。 ...

August 18, 2021 · 1 min · jiezi

关于ElasticSearch:ElasticSearch版本控制java实现

一、前言最近工作中有这样一个ElasticSearch(以下简称ES)写入的场景,Flink解决完数据实时写入ES。当初须要将一批历史数据通过Flink加载到到ES,有两个点须要保障: 对于历史数据,ES已有文档,则舍弃旧数据,ES没有则插入历史数据。对于新数据,能对现有的ES数据进行更新。参考ElasticSearch进阶篇(一)--版本控制,能够应用ES的版本实现该需要的开发。 二、代码实现及验证代码实现申请写数据时退出version和version_type参数,次要代码如下: IndexRequest indexRequest = Requests.indexRequest() .index(indexName) .id("1") // 指定版本比拟的业务字段,具体业务具体分析,个别取工夫戳较为适合 .version(Long.parseLong(dataMap1.get("create").toString())) // 指定应用内部版本号 .versionType(VersionType.EXTERNAL) .source(dataMap);验证验证demo可应用以后工夫的工夫戳作为版本比拟根据。验证思路如下: 运行demo程序,在以后工夫戳下,插入一条数据,通过kibana等工具测验数据是否插入胜利。并记录以后的工夫戳。更改某些字段值对数据进行更新,再次运行程序,测验数据是否更新胜利。将工夫版本比拟的字段值固定为第一次执行程序的工夫戳,测验数据是否更新胜利。验证后果如下图: 三、总结由截图可看到,第一步和第二步都能执行胜利,第三步执行会呈现版本抵触的异样,依据提醒很不便能辨认出起因,即ElasticSearch进阶篇(一)--版本控制中得出的论断,应用version和version_type=EXTERNAL进行版本控制时,只有要写入文档的版本号大于已有文档的版本号能力更新胜利。 案例代码参考:elasticsearch_demo

August 12, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch进阶3-ilm-policy

一、参考elasticsearch 学习系列目录——更新ing 官网文档 ilm 应用索引生命周期治理实现热温冷架构 二、根本应用2.1 创立生命周期策略PUT _ilm/policy/yztest-policy{ "policy": { "phases": { "hot": { "min_age": "0ms", "actions": { "rollover": { "max_size": "50gb", "max_age": "30d", "max_docs": 5 }, "set_priority": { "priority": 100 } } }, "warm": { "min_age": "3d", "actions": { "readonly": {}, "set_priority": { "priority": 50 } } }, "delete": { "min_age": "30d", "actions": { "delete": {} } } } }}2.2 创立模版PUT _template/yztest-template{ "index_patterns": ["yztest-*"], "settings": { "index.lifecycle.name": "yztest-policy", "index.lifecycle.rollover_alias": "yztest-alias" }}2.3 手动创立第一个索引PUT yztest-000001 { "aliases": { "yztest-alias":{ "is_write_index": true } }} 2.4 缩短查看生命周期工夫PUT _cluster/settings{ "persistent": { "indices.lifecycle.poll_interval" : "5s" }}

August 4, 2021 · 1 min · jiezi

关于elasticsearch:MeiliSearch-入门使用

一、参考elasticsearch 学习系列目录——更新ingmeilisearch quick start二、装置# Update brew and install MeiliSearchbrew update && brew install meilisearch# Launch MeiliSearchmeilisearch 三、根本应用3.1 写入数据原始数据 movies.json curl \ -X POST 'http://127.0.0.1:7700/indexes/movies/documents' \ --data @movies.json 3.2 查问数据 3.3 自带客户端搜寻

July 23, 2021 · 1 min · jiezi

关于elasticsearch:安装elasticsearch篇配置Apache

设置代理1.启用mod_proxy sudo a2enmod proxy_http需重启Apache2.用文本编辑器关上/etc/apache2/sites-available/000-default.conf3.在配置文件头部加上: Listen 80804.在配置文件底部加上 <VirtualHost *:8080> ProxyPass "/" "http://localhost:9200/" ProxyPassReverse "/" "http://localhost:9200/"</VirtualHost>5.需重启Apache sudo systemctl restart apache26.验证代理是否胜利 curl -i http://localhost:8080/_cluster/health如果显示信息跟以下相似阐明胜利 HTTP/1.1 200 OKDate: Tue, 23 Feb 2016 20:38:03 GMTContent-Type: application/json; charset=UTF-8Content-Length: 389Connection: keep-alive{"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":5,"active_shards":5,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":5,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":50.0}

July 20, 2021 · 1 min · jiezi

关于ElasticSearch:ES工作原理

写入过程(1)申请打到的节点叫做协调节点,协调节点依据特定的路由算法将文档进行路由,行将申请转发到指定的节点(路由算法:hash(doc_id) % num_primary_shard)(2)节点的主分片 primary shard 解决申请,并将数据同步到正本分片 replica shard(3)协调节点发现主分片和所有的正本分片写完之后,再返回客户端后果 读取过程(1)申请打到的节点叫做协调节点,协调节点会依据文档id进行 hash,判断文档在哪个节点,而后依据随机算法,从相应节点的主分片和副本分片中随机抉择一个进行查问(2)承受申请的分片将后果返回协调节点,协调节点在返回数据给客户端 查问过程多 shard 搜寻过程别离两局部,一是在多个 shard 中查问合乎的文档,二是从多个 shard 中获取数据 1. 查问阶段当申请达到某个节点后,该节点就是以后申请的协调节点。协调节点首先会创立一个 from + size 的空优先队列, 向相干的 shard 发送查问申请每个 shard 也会在本地创立一个 from + size 的空优先队列,而后查问合乎的文档,再将后果返回协调节点,但后果中只蕴含文档 id 和排序值协调节点合并其余分片返回的查问后果2. 获取数据阶段协调节点分别哪些文档须要取回,并向相干分片发送多个 GET 申请获取数据分片加载并丰盛文档后返回协调节点合并后果,而后返回给客户端

July 14, 2021 · 1 min · jiezi

关于elasticsearch:关于-Elasticsearch-移除-type-的简要说明

之前碰到该问题在网上查阅了局部博客,前面浏览官网文档后发现大部分博客所形容的 Es 版本和其所做的对于移除 type 的工作的映射关系是谬误的,因而在这里对官网文档精简翻译了一下,简要阐明下为什么 Es 要移除 type,以及 Es 是怎么移除 type 的。 1. 为什么要移除 type?咱们常常会用 MySQL 的常识来了解 es 的一些概念,比方将 es 的 index 类比成 database,将 type 类比成 table,但这个比喻实际上是不精确的。在 MySQL 中,table 之间是互相独立的,每个表有本人的 schema,每个表都能够有雷同的列名,同时反对不同的类型,比方表 A 的 age 列是 tinyint,而表 B 的 age 列是 varchar(10),但在 es 中,雷同名字的字段的 mapping 定义必须是统一的,因为在底层 Lucene 只会存一份。 在这个根底上,如果在一个 index 内存了多个 type,且这些 type 之间只有极少共用的字段,会使得数据过于离散,从而影响 Lucene 的压缩性能。 2. Es 为了移除 type 做了哪些工作移除 type,从字面上就能看出是一个十分大的变动,因而 es 尽可能地提供了平滑的降级形式。 2.1 Elasticsearch 5.6.0通过对 index 设置参数 index.mapping.single_type: true 就可能启用单 index 单 type 限度(一个 index 只能反对一个 type),同样该限度从 6.0 版本开始该限度会强制启用。 ...

July 11, 2021 · 1 min · jiezi

关于elasticsearch:Elastic-Stack学习笔记02

ElasticSearch外围详解文档元数据(metadata) _index 索引_type 文档类型_id 惟一标识符(默认32位)查问响应丑化pertty : 使得返回的json更易查看GET {查问url}?pretty指定响应字段 : _sourceGET /haoke/user/1005?_source=id,name只返回指定字段 : _source?source=GET /haoke/user/1005/_source?_source=id,name判断文档是否存在HEAD /{索引}/{类型}/{id}批量操作批量查问 _mgetPOST /{索引}/{类型}/_mget{ "ids":["AXqP5R4PXV22eQAormWv","1111"]}found:false 示意查问后果不存在 批量增、删、改 _bulkPOST /{索引}/{类型}/_bulk/* 插入 */{"create":{"_index":"haoke","_type":"user","_id":2001}}{"id":2001,"name":"name1","age": 20,"sex": "男"}{"create":{"_index":"haoke","_type":"user","_id":2002}}{"id":2002,"name":"name2","age": 20,"sex": "男"}//最初一行须要有回车/* 删除 */{"delete":{"_index":"haoke","_type":"user","_id":2001}}{"delete":{"_index":"haoke","_type":"user","_id":2002}}//最初一行须要有回车分页size : 后果数,默认10from : 跳过开始的后果数,默认0GET /{索引}/{类型}/_search?size=10&from=0ES 分页会在每个分片生成一次排序后果,最初集中起来汇总排序,因而分页太深或申请太多会影响性能 映射text :须要被全文搜寻(分词)的字段,如内容,形容keyword :结构化字段,如地址,状态,标签创立映射PUT /{索引}{ "settings":{ "index":{ "number_of_shards":"2", "number_of_replicas":"0" } }, "mappings":{ "person":{ "properties":{ "name":{ "type":"text" }, "age":{ "type":"integer" }, "mail":{ "type":"keyword" }, "hobby":{ "type":"text" } } } }}查看映射GET /{索引}/_mapping搜寻测试POST /test/person/_bulk{"create":{"_index":"test","_type":"person","_id":1}}{"id":1,"name":"听音乐","age": 20}{"create":{"_index":"test","_type":"person","_id":2}}{"id":2,"name":"玩音乐","age": 20}POST /{索引}/{文档}/_search{ "query":{ "match":{ "name":"音乐" } }}结构化查问term查问:准确匹配值。如数字,日期,布尔值POST /{索引}/{文档}/_search{ "query":{ "term":{ "age": 20 } }}terms查问:多条件匹配POST /{索引}/{文档}/_search{ "query":{ "terms":{ "age": [20, 21] } }}range查问:范畴匹配POST /{索引}/{文档}/_search{ "query":{ "range":{ "age": { "gte" : 20 } } }}exits查问:文档是够蕴含某字段,相当于SQL的IS NULL条件POST /{索引}/{文档}/_search{ "query":{ "exists":{ "field" : "hobby" } }}match查问:规范查问,全文本查问,准确查问POST /{索引}/{文档}/_search{ "query":{ "match":{ "name" : "音乐" } }}bool查问:合并多个查问条件must 多个条件齐全匹配,相当于andmust_not 多个条件相同匹配,相当于notshould 至多有一个条件匹配,相当于orPOST /{索引}/{文档}/_search{ "query":{ "bool": { "must": { "term":{ "age" : 20 } }, "must_not": { "term":{ "name" : "听音乐" } }, "should": [ { "term":{ "name" : "name1" } }, { "term":{ "name" : "name2" } } ] } }}过滤查问:filterPOST /{索引}/{文档}/_search{ "query":{ "bool" : { "filter": { "term": { "age": 20 } } } }}查问和过滤的比照一条过滤语句会询问每个文档的字段值是否蕴含着特定值。查问语句会询问每个文档的字段值与特定值的匹配水平如何。一条查问语句会计算每个文档与查问语句的相关性,会给出一个相关性评分 _score,并且 依照相关性对匹 配到的文档进行排序。 这种评分形式十分实用于一个没有齐全配置后果的全文本搜寻。一个简略的文档列表,疾速匹配运算并存入内存是非常不便的, 每个文档仅须要1个字节。这些缓存的过滤后果集与后续申请的联合应用是十分高效的。查问语句不仅要查找相匹配的文档,还须要计算每个文档的相关性,所以一般来说查问语句要比 过滤语句更耗时,并且查问后果也不可缓存。倡议:做准确匹配搜寻时,最好用过滤语句,因为过滤语句能够缓存数据。 ...

July 11, 2021 · 1 min · jiezi

关于ElasticSearch:Elastic-Stack学习笔记01

Elasticsearch参考教程:https://www.bilibili.com/vide...https://gitee.com/moxi159753/...官网文档:https://www.elastic.co/guide/... 基本概念索引(index):对逻辑数据的逻辑存储,能够了解为mysql的表文档(document):次要实体,能够了解为mysql的一行记录映射(mapping):文档的属性,字段,每个字段的数据类型文档类型:一个索引能够有多个类型;同一索引中,同一属性文档类型必须雷同。RESTful API创立索引PUT /haoke{ "settings": { "index": { "number_of_shards": "2", #分片数 "number_of_replicas": "0" #正本数 } }}删除索引DELETE /{索引}不须要额定的参数插入数据URL规定: POST /{索引}/{类型}/{id(非必填)}POST /haoke/user/{ "id": 1, "name": "test"}_id为惟一标识符,id为参数 更新数据ES中文档数据不能批改,只能笼罩更新(全量)PUT /{索引}/{类型}/{id}{ "id": 1, "name": "test2"}部分更新ES中文档数据不能批改,只能笼罩更新(全量)POST /{索引}/{类型}/{id}/_update{ "doc":{ "name": "test3" }}删除数据DELETE /{索引}/{类型}/{id}不须要额定的参数搜寻数据依据ID搜寻GET /{索引}/{类型}/{id}不须要额定的参数搜寻全副数据GET /{索引}/{类型}/_search不须要额定的参数关键字搜寻GET /{索引}/{类型}/_search?q={字段}:{值}不须要额定的参数DSL查问POST /{索引}/{类型}/_search例1:查问30岁的用户{ "query" : { "match" : { "age" : 30 } }}例2:查问大于等于30岁,名字为test的用户 { "query": { "bool": { "filter": { "range": { "age": { "gte": 30 } } }, "must": { "match": { "name": "test" } } } }}全文搜寻POST /{索引}/{类型}/_search{ "query": { "match": { "name": "test" } }}后果高亮显示POST /{索引}/{类型}/_search{ "query": { "match": { "name": "test" } }, "highlight": { "fields": { "name": {} } }}聚合相似mysql的group by操作{ "aggs": { "all_interests": { "terms": { "field": "age" } } }}

July 10, 2021 · 1 min · jiezi

关于elasticsearch:EShighlight高亮查询

@[TOC] 一、高亮查问高亮查问就是你输出的关键字,以肯定的特殊字符款式展现给用户,让用户晓得为什么这个后果被检索进去 高亮展现的数据,自身就是文档中的一个field,独自将field以highlight的模式返回给你。ES提供了一个highlight属性,和query同级别的。 fragment_size :指定高亮数据展现多少个字符回来;pre_tag:指定前缀标签,如 <font color="red">post_tags:指定后缀标签,如 </font>field:指定那个字段为高亮字段1.1、实例:根据smsContent字段蕴含的魅力字段语法高;1.1.1、RESTful 代码POST /sms-logs-index/_search{ "query": { "match": { "smsContent": "魅力" } }, "highlight": { "fields": { "smsContent": {} }, "pre_tags": "<font color='red'>", "post_tags": "</font>", "fragment_size": 10 }} 1.1.2、java 代码 @Test public void height() throws IOException { // 1、SearchRequest SearchRequest searchRequest = new SearchRequest(index); // 2、指定查问条件 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); // 2.1、查问条件 searchSourceBuilder.query(QueryBuilders.matchQuery("smsContent", "魅力")); // 2.2、指定高亮 HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.field("smsContent", 10) .preTags("<font color='red'>") .postTags("</font>"); searchSourceBuilder.highlighter(highlightBuilder); searchRequest.source(searchSourceBuilder); // 3、执行 SearchResponse resp = client.search(searchRequest, RequestOptions.DEFAULT); // 4、打印 for (SearchHit hit : resp.getHits().getHits()) { System.out.println(hit.getHighlightFields().get("smsContent")); } } ...

July 10, 2021 · 1 min · jiezi

关于elasticsearch:扩展Elasticsearch客户端简化ES查询net-coreframework

扩大Elasticsearch客户端简化ES查问(.net core/framework)Elasticsearch .net 客户端提供了两种形式进行查问操作 基于对象结构查问 new IdsQuery{ Name = "named_query", Boost = 1.1, Values = new List<Id> { 1, 2, 3, 4 },}基于lambda语法查问 q.Ids(c => c .Name("named_query") .Boost(1.1) .Values(1, 2, 3, 4))两种形式各有优缺点,最次要起因是条件稍有点简单后,感觉像在套娃,一层套一层,特地是lambda 如: var searchResults = this.Client.Search<Project>(s => s .Query(q => q .Bool(b => b .Should( bs => bs.Term(p => p.Name, "x"), bs => bs.Term(p => p.Name, "y") ) ) ));官网文档有简化的写法,Writing bool queries | Elasticsearch.Net and NEST: the .NET clients [7.x] | Elastic ...

July 7, 2021 · 2 min · jiezi

关于elasticsearch:EStermterms查询

2.1、term&terms查问2.1.1、term查问 参考: Elasticsearch Reference [7.10] » Query DSL » Term-level queries » Term query term的查问是代表齐全匹配,搜寻之前不会对你搜寻的关键字进行分词,如关键字手机,不会分成手和机;再依据关键字去文档分词库中去匹配内容。相似于MySQL库的 where province = ? 2.1.1.1、命令# from size相似于mysql的limitPOST /sms-logs-index/_search{ "from": 0, "size": 10, "query": { "term": { "province": { "value": "北京" } } }} 2.1.1.2、java代码 @Test public void termQuery() throws IOException { //1。创立request对象,查问用的对象个别都是SearchRequest对象 SearchRequest mySearchRequest = new SearchRequest(index); //2,指定查问条件,依赖查问条件的对象SearchSourceBuilder的对象 SearchSourceBuilder builder = new SearchSourceBuilder(); builder.from(0).size(10).query(QueryBuilders.termQuery("province", "北京")); //指定term查新条件 mySearchRequest.source(builder); //3. 执行查问 SearchResponse search = client.search(mySearchRequest, RequestOptions.DEFAULT); //4. 获取到_source中的数据,并展现 //留神RESTFUL格调上是两个hits,所以这里要两次getHits() for (SearchHit hit : search.getHits().getHits()) { Map<String, Object> result = hit.getSourceAsMap(); System.out.println(result); } }2.1.2、terms 查问terms和terms的查问机制是一样的,都不会将指定的查问关键字进行分词,间接去分词库中匹配,找到相应的文档内容。terms:是针对一个字段蕴含多个值时应用。换句话说: ...

July 5, 2021 · 1 min · jiezi

关于elasticsearch:BEJAVAElasticsearch笔记技术揭秘

海量数据系统架构的技术选型https://db-engines.com/en/ran... 全文搜索引擎(NLP,爬虫,如百度)垂直搜索引擎(电商,OA,站内搜索,视频网站) 搜索引擎具备要求: 查问速度快(高效的压缩算法,疾速的编码和解码)后果精确(BM25,TF-IDF)检索后果丰盛(召回率)上手Elasticsearch环境装置 操作系统|JDK|本身 兼容性jdk(8|11|14) 兼容性elastic.co/cn/downloads 兼容性Elasticsearch目录构造 bin:可执行脚本文件,包含启动es服务、插件治理、函数命令config:配置文件目录,es配置、角色配置、jvm配置等lib:es所依赖的java库data: 默认的数据寄存目录。蕴含节点、分片、索引、文档的所有数据,生产环境要求必须批改。logs: 默认日志文件存储门路,生产环境务必批改。modules: 蕴含所有es模块,如Cluster、Discovery、Indices等plugins:曾经装置的插件目录jdk/jdk.app 7.0当前才有,自带的java环境启动 启动 bin/elasticsearch ,关上 localhost:9200多节点形式 多我的项目单节点单我的项目多节点 elasticserach -E path.data=data1 -Ee path.logs=log1 -E node.name=node1 -E cluster.name=msb_teachelasticserach -E path.data=data1 -Ee path.logs=log1 -E node.name=node1 -E cluster.name=msb_teach集群衰弱值 衰弱值状态 green 所有primary和replica均为active,集群衰弱yellow,至多一个replica不可用,但所有primary均active,数据认可保障残缺red:至多一个primary 不可用,集群不可用衰弱值查看 _cat/health_cluster/healthkibana 验证服务启动胜利 localhost:5601配置es服务地址elasticsearch.host:["http://localhost:9201"](kibana.yml)命令行敞开kibana: 敞开窗口ps -ef|grep 5601 或 ps -ef|grep kibana 或 lsof -i:5601kill -9 pid对于“kibana server is not ready yet” 问题起因及解决办法 kibana和Elasticsearch版本不兼容(放弃版本统一)Elasticsearch的服务地址和Kibana中配置的elasticsearch.hosts不同(elasticsearch.yml中配置)Elasticsearch中禁止跨域拜访(elasticsearch.yml中配置容许跨域)服务器开启了防火墙(敞开防火墙或批改服务器安全策略)Elasticsearch所在磁盘残余空间有余90%(清理磁盘空间,配置监控和报警)透过景象看实质:带你看穿“索引”实质索引 帮忙疾速检索以数据结构为载体以文件模式落地数据库的组成构造 为什么B+Trees(Mysql)不适宜大数据检索mysql,十万级,无索引:0.295smysql, 百万级,无索引: 3.365smysql, 百万级,全文索引:1.033smysql, 千万级,全文索引:10.038ses, 千万,.8smysql的索引构造 B-Trees 可视化 ...

July 4, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch-异常处理-生命周期管理

一、参考elasticsearch 学习系列目录——更新ing二、问题形容GET _cat/tasks?vaction task_id parent_task_id type start_time timestamp running_time ip nodecluster:monitor/tasks/lists LrCxElELQGqRNI4tok60ug:234640577 - transport 1625046522112 09:48:42 175.8micros 127.0.0.1 ft-elasticsearch-8554868c8d-qzrckcluster:monitor/tasks/lists[n] LrCxElELQGqRNI4tok60ug:234640578 LrCxElELQGqRNI4tok60ug:234640577 direct 1625046522112 09:48:42 94.2micros 127.0.0.1 ft-elasticsearch-8554868c8d-qzrckGET _tasks/LrCxElELQGqRNI4tok60ug:234624650{ "error" : { "root_cause" : [ { "type" : "resource_not_found_exception", "reason" : "task [LrCxElELQGqRNI4tok60ug:234624650] isn't running and hasn't stored its results" } ], "type" : "resource_not_found_exception", "reason" : "task [LrCxElELQGqRNI4tok60ug:234624650] isn't running and hasn't stored its results" }, "status" : 404}GET _cat/indices/wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent*?vhealth status index uuid pri rep docs.count docs.deleted store.size pri.store.sizeyellow open wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000010 EC9xHq4WQlGwBRkmZwIt2w 1 1 2731837 0 2.2gb 2.2gbyellow open wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009 EfXMlKq-Q8288Twk9KJC_g 1 1 3407045 0 2.7gb 2.7gbyellow open wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000008 2W_fORU5RA6yUpDBm8crlQ 1 1 14046 0 13.1mb 13.1mbGET wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009/_count{ "count" : 0, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }}GET wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009/_search{ "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 0, "relation" : "eq" }, "max_score" : null, "hits" : [ ] }}GET wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009/_ilm/explain{ "indices" : { "wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009" : { "index" : "wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009", "managed" : true, "policy" : "es_rp2", "lifecycle_date_millis" : 1624954353191, "age" : "1.07d", "phase" : "hot", "phase_time_millis" : 1625033515964, "action" : "rollover", "action_time_millis" : 1624954501032, "step" : "ERROR", "step_time_millis" : 1625033689886, "failed_step" : "check-rollover-ready", "step_info" : { "type" : "illegal_argument_exception", "reason" : "index [wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009] is not the write index for alias [wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent]", "stack_trace" : """java.lang.IllegalArgumentException: index [wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009] is not the write index for alias [wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent] at org.elasticsearch.xpack.core.ilm.WaitForRolloverReadyStep.evaluateCondition(WaitForRolloverReadyStep.java:100) at org.elasticsearch.xpack.ilm.IndexLifecycleRunner.runPeriodicStep(IndexLifecycleRunner.java:133) at org.elasticsearch.xpack.ilm.IndexLifecycleService.triggerPolicies(IndexLifecycleService.java:274) at org.elasticsearch.xpack.ilm.IndexLifecycleService.triggered(IndexLifecycleService.java:213) at org.elasticsearch.xpack.core.scheduler.SchedulerEngine.notifyListeners(SchedulerEngine.java:175) at org.elasticsearch.xpack.core.scheduler.SchedulerEngine$ActiveSchedule.run(SchedulerEngine.java:203) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:830)""" }, "phase_execution" : { "policy" : "es_rp2", "phase_definition" : { "min_age" : "0ms", "actions" : { "rollover" : { "max_size" : "30gb", "max_age" : "14d" } } }, "version" : 12, "modified_date_in_millis" : 1624864407438 } } }}PUT wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009/_settings{ "index.lifecycle.indexing_complete": "true"}POST wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009/_ilm/retry{ "indices" : { "wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009" : { "index" : "wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009", "managed" : true, "policy" : "es_rp2", "lifecycle_date_millis" : 1624954353191, "age" : "1.1d", "phase" : "hot", "phase_time_millis" : 1625049429874, "action" : "rollover", "action_time_millis" : 1624954501032, "step" : "check-rollover-ready", "step_time_millis" : 1625049429874, "phase_execution" : { "policy" : "es_rp2", "phase_definition" : { "min_age" : "0ms", "actions" : { "rollover" : { "max_size" : "30gb", "max_age" : "14d" } } }, "version" : 12, "modified_date_in_millis" : 1624864407438 } } }}GET wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009/_ilm/explain?human{ "indices" : { "wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009" : { "index" : "wksp_2dc431d6693711eb8ff97aeee04b54af_keyevent-000009", "managed" : true, "policy" : "es_rp2", "lifecycle_date" : "2021-06-30T10:44:37.083Z", "lifecycle_date_millis" : 1625049877083, "age" : "2.48m", "phase" : "hot", "phase_time" : "2021-06-30T10:37:09.874Z", "phase_time_millis" : 1625049429874, "action" : "complete", "action_time" : "2021-06-30T10:44:39.198Z", "action_time_millis" : 1625049879198, "step" : "complete", "step_time" : "2021-06-30T10:44:39.198Z", "step_time_millis" : 1625049879198, "phase_execution" : { "policy" : "es_rp2", "phase_definition" : { "min_age" : "0ms", "actions" : { "rollover" : { "max_size" : "30gb", "max_age" : "14d" } } }, "version" : 12, "modified_date" : "2021-06-28T07:13:27.438Z", "modified_date_in_millis" : 1624864407438 } } }}indices.lifecycle.poll_interva生命周期策略查看距离

June 30, 2021 · 3 min · jiezi

关于ElasticSearch:ElasticSearch通过JavaAPI无法查询到中文字段的原因及解决

ElasticSearch通过JavaAPI无奈查问到中文字段的起因:中文被规范分词器分词了,天然就查问不到一个残缺的字段名 解决:在查询方法中的name参数后加上 .keyword 通知程序这是一个残缺的词,不可拆分 给个大特写

June 30, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch762-kafka-单点部署

系统优化#!/bin/bash############################################################## File Name: centos7-optimization.sh# Author: Sean_Li# Created Time: 20210414#==================================================================echo "check centos7 or centos6"VERSION=`cat /etc/redhat-release|awk -F " " '{print \$3}'|awk -F "." '{print \$1}'`if [ "${VERSION}" == "6" ];then echo "centos6" exit 3else echo "centos7"fi#history export HISTTIMEFORMAT="%F %T `whoami` " && echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/profile && source /etc/profile#增加公网DNS地址cat >> /etc/resolv.conf << EOFnameserver 114.114.114.114EOF#禁用selinuxsed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/configsetenforce 0#敞开防火墙systemctl disable firewalld.service systemctl stop firewalld.service#批改字符集sed -i 's/LANG="en_US.UTF-8"/LANG="zh_CN.UTF-8"/' /etc/locale.conf#localectl set-locale LANG=zh_CN.UTF-8 source /etc/locale.conf#Yum源更换为国内阿里源yum install wget telnet -ymv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backupwget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo#增加阿里的epel源#add the epelwget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo#yum从新建设缓存yum clean allyum makecacheyum install -y ntpdate net-tools lrzsz tree cmake gcc gcc-c++ autoconf l libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel libxslt-devel libtool-ltdl-devel make wget docbook-dtds asciidoc e2fsprogs-devel gd gd-devel openssl openssl-devel lsof git unzip gettext-devel gettext libevent libevent-devel pcre pcre-devel vim readline readline-devel#主机名ipname=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:" | awk -F '.' '{print $3"_"$4}'`echo $ipnamehostnamectl set-hostname insurace-$ipname#同步time/usr/sbin/ntpdate cn.pool.ntp.orgecho "* 4 * * * /usr/sbin/ntpdate cn.pool.ntp.org > /dev/null 2>&1" >> /var/spool/cron/rootsystemctl restart crond.servicehwclock --systohctimedatectl set-timezone Asia/Shanghai#配置 sshsed -i 's/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/' /etc/ssh/sshd_configsed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config #禁止DNS反向解析客户端#sed -i 's/#Port 22/Port 2223/' /etc/ssh/sshd_configsystemctl restart sshd.service#零碎最大关上那啥ulimit -SHn 102400echo "ulimit -SHn 102400" >> /etc/rc.localchmod +x /etc/rc.d/rc.localcat >> /etc/security/limits.conf << EOF* soft nofile 655350* hard nofile 655350EOFsed -i 's/4096/65535/g' /etc/security/limits.d/20-nproc.conf#内核参数优化cat >> /etc/sysctl.conf << EOFnet.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1#决定查看过期多久街坊条目net.ipv4.neigh.default.gc_stale_time=120#应用arp_announce / arp_ignore解决ARP映射问题net.ipv4.conf.default.arp_announce = 2net.ipv4.conf.all.arp_announce=2net.ipv4.conf.lo.arp_announce=2# 防止放大攻打net.ipv4.icmp_echo_ignore_broadcasts = 1# 开启歹意icmp谬误音讯爱护net.ipv4.icmp_ignore_bogus_error_responses = 1#敞开路由转发net.ipv4.ip_forward = 0net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.default.send_redirects = 0#开启反向门路过滤net.ipv4.conf.all.rp_filter = 1net.ipv4.conf.default.rp_filter = 1#解决无源路由的包net.ipv4.conf.all.accept_source_route = 0net.ipv4.conf.default.accept_source_route = 0#敞开sysrq性能kernel.sysrq = 0#core文件名中增加pid作为扩展名kernel.core_uses_pid = 1# 开启SYN洪水攻打爱护net.ipv4.tcp_syncookies = 1#批改音讯队列长度kernel.msgmnb = 65536kernel.msgmax = 65536#设置最大内存共享段大小byteskernel.shmmax = 68719476736kernel.shmall = 4294967296#timewait的数量,默认180000net.ipv4.tcp_max_tw_buckets = 6000net.ipv4.tcp_sack = 1net.ipv4.tcp_window_scaling = 1net.ipv4.tcp_rmem = 4096 87380 4194304net.ipv4.tcp_wmem = 4096 16384 4194304net.core.wmem_default = 8388608net.core.rmem_default = 8388608net.core.rmem_max = 16777216net.core.wmem_max = 16777216#每个网络接口接管数据包的速率比内核解决这些包的速率快时,容许送到队列的数据包的最大数目net.core.netdev_max_backlog = 262144#限度仅仅是为了避免简略的DoS 攻打net.ipv4.tcp_max_orphans = 3276800#未收到客户端确认信息的连贯申请的最大值net.ipv4.tcp_max_syn_backlog = 262144net.ipv4.tcp_timestamps = 0#内核放弃建设连贯之前发送SYNACK 包的数量net.ipv4.tcp_synack_retries = 1#内核放弃建设连贯之前发送SYN 包的数量net.ipv4.tcp_syn_retries = 1#启用timewait 疾速回收net.ipv4.tcp_tw_recycle = 1#开启重用。容许将TIME-WAIT sockets 从新用于新的TCP 连贯net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_mem = 94500000 915000000 927000000net.ipv4.tcp_fin_timeout = 1#当keepalive 起用的时候,TCP 发送keepalive 音讯的频度。缺省是2 小时net.ipv4.tcp_keepalive_time = 1800net.ipv4.tcp_keepalive_probes = 3net.ipv4.tcp_keepalive_intvl = 15#容许零碎关上的端口范畴net.ipv4.ip_local_port_range = 1024 65000#批改防火墙表大小,默认65536net.netfilter.nf_conntrack_max=655350net.netfilter.nf_conntrack_tcp_timeout_established=1200# 确保无人能批改路由表net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.default.accept_redirects = 0net.ipv4.conf.all.secure_redirects = 0net.ipv4.conf.default.secure_redirects = 0vm.max_map_count = 1000000fs.nr_open = 10000000fs.file-max = 11000000EOF/sbin/sysctl -pecho "-----------------------success------------------------------"软件下载wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gzwget https://archive.apache.org/dist/kafka/2.2.1/kafka_2.11-2.2.1.tgzwget https://artifacts.elastic.co/downloads/kibana/kibana-7.6.2-linux-x86_64.tar.gz装置 elasticsearch-7.6.2[root@elk24 tar]# lselasticsearch-7.6.2-linux-x86_64.tar.gz kibana-7.6.2-linux-x86_64.tar.gz[root@elk24 tar]# tar -xf elasticsearch-7.6.2-linux-x86_64.tar.gz[root@elk24 tar]# mv elasticsearch-7.6.2-linux-x86_64 /data/[root@elk24 tar]# tar -xf kibana-7.6.2-linux-x86_64.tar.gz[root@elk24 tar]# mv kibana-7.6.2-linux-x86_64 /data/config[root@elk24 tar]# cd /data/elasticsearch-7.6.2/config/[root@elk24 config]# lselasticsearch.keystore elasticsearch.yml elasticsearch.yml.bak jvm.options log4j2.properties role_mapping.yml roles.yml users users_roles[root@elk24 config]# cat elasticsearch.ymlcluster.name: insurance-pro-7.6.2node.name: master-1node.master: truenode.data: truepath.data: /data/elasticsearch-7.6.2/datapath.logs: /data/elasticsearch-7.6.2/logshttp.port: 9200network.host: 0.0.0.0cluster.initial_master_nodes: ["10.110.24.88"]discovery.zen.ping.unicast.hosts: ["10.110.24.88"]discovery.zen.minimum_master_nodes: 2discovery.zen.ping_timeout: 30sdiscovery.zen.fd.ping_retries: 15discovery.zen.fd.ping_interval: 20sdiscovery.zen.master_election.ignore_non_master_pings: truehttp.cors.enabled: truehttp.cors.allow-origin: "*"http.cors.allow-headers: "Authorization,X-Requested-With,Content-Length,Content-Type"xpack.security.enabled: truexpack.security.transport.ssl.enabled: truesearch.max_buckets: 200000bootstrap.memory_lock: falsebootstrap.system_call_filter: falsegateway.expected_nodes: 1###java[root@elk24 ik]# cat /etc/profile# /etc/profile..export JAVA_HOME=/data/elasticsearch-7.6.2/jdkexport PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar[root@elk24 ik]# kibana conf[root@elk24 config]# lsapm.js kibana.yml kibana.yml.bak[root@elk24 config]# pwd/data/kibana-7.6.2-linux-x86_64/config[root@elk24 config]# cat kibana.ymlserver.port: 5601server.host: "0.0.0.0"server.name: "10.110.24.88"elasticsearch.hosts: ["http://10.110.24.88:9200"]elasticsearch.username: "elastic"elasticsearch.password: "Elast111111111#"elasticsearch.ssl.verificationMode: noneelasticsearch.requestTimeout: 90000i18n.locale: "zh-CN"[root@elk24 config]# elasticsearch 装置ik分词[root@elk24 ik]# mkdir /data/elasticsearch-7.6.2/plugins/ik###https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v7.10.0##[root@elk24 ik]# pwd/data/elasticsearch-7.6.2/plugins/ik[root@elk24 ik]# wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip[root@elk24 ik]# tar -xf elasticsearch-analysis-ik-7.6.2.zip[root@elk24 ik]# mv elasticsearch-analysis-ik-7.6.2.zip /tmp[root@elk24 ik]# lscommons-codec-1.9.jar commons-logging-1.2.jar config elasticsearch-analysis-ik-7.6.2.jar httpclient-4.5.2.jar httpcore-4.4.4.jar plugin-descriptor.properties plugin-security.policy破解x-pack插件获取永恒白金特权(仅供学习应用)LicenseVerifier.java文件[root@elk24 opt]# cat LicenseVerifier.javapackage org.elasticsearch.license;/** * * Responsible for verifying signed licenses * */public class LicenseVerifier { /** * * verifies the license content with the signature using the packaged * * public key * * @param license to verify * * @return true if valid, false otherwise * */ public static boolean verifyLicense(final License license, byte[] publicKeyData) { return true; } public static boolean verifyLicense(final License license) { return true; }}XPackBuild.java 文件[root@elk24 opt]# cat XPackBuild.javapackage org.elasticsearch.xpack.core;import org.elasticsearch.common.SuppressForbidden;import org.elasticsearch.common.io.PathUtils;import java.io.IOException;import java.net.URISyntaxException;import java.net.URL;import java.nio.file.Files;import java.nio.file.Path;import java.util.jar.JarInputStream;import java.util.jar.Manifest;public class XPackBuild { public static final XPackBuild CURRENT; static { CURRENT = new XPackBuild("Unknown", "Unknown"); } /** * * Returns path to xpack codebase path * */ @SuppressForbidden(reason = "looks up path of xpack.jar directly") static Path getElasticsearchCodebase() { URL url = XPackBuild.class.getProtectionDomain().getCodeSource().getLocation(); try { return PathUtils.get(url.toURI()); } catch (URISyntaxException bogus) { throw new RuntimeException(bogus); } } private String shortHash; private String date; XPackBuild(String shortHash, String date) { this.shortHash = shortHash; this.date = date; } public String shortHash() { return shortHash; } public String date() { return date; }}[root@elk24 opt]# javac -cp "/data/elasticsearch-7.6.2/lib/elasticsearch-7.6.2.jar:/data/elasticsearch-7.6.2/lib/lucene-core-8.4.0.jar:/data/elasticsearch-7.6.2/modules/x-pack-core/x-pack-core-7.6.2.jar" LicenseVerifier.java [root@elk24 opt]# javac -cp "/data/elasticsearch-7.6.2/lib/elasticsearch-7.6.2.jar:/data/elasticsearch-7.6.2/lib/lucene-core-8.4.0.jar:/data/elasticsearch-7.6.2/modules/x-pack-core/x-pack-core-7.6.2.jar:/data/elasticsearch-7.6.2/lib/elasticsearch-core-7.6.2.jar" XPackBuild.java将/data/elasticsearch-7.6.2/modules/x-pack-core/x-pack-core-7.6.2.jar文件和/opt下的两个class文件 拷贝到本人的电脑上 应用7zip压缩软件关上x-pack-core-7.6.2.jar 并替换两个class文件 ...

June 30, 2021 · 5 min · jiezi

关于elasticsearch:elasticsearch进阶1-reindex

一、参考elasticsearch 学习系列目录——更新ing二、示例2.1 批改字段名称批改字段名称,即先删除原来字段,赋值新字段 POST _reindex{ "source": { "index": "yztest" }, "dest": { "index": "yztest1" }, "script": { "lang": "painless", "source": """ for (item in params.updateFields){ if (ctx._source.containsKey(item)){ def newItem = "df_" + item; ctx['_source'][newItem] = ctx._source.remove(item); } } """, "params": { "updateFields": ["f1", "f2"] } }}

June 28, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch实际总结4-查询缓存

一、参考elasticsearch 学习系列目录——更新ing 对于 Elasticsearch 的查问缓存,你想晓得的都在这里 二、Shard request cache分片级别的查问缓存,每个分片都有本人的缓存 2.1 缓存策略并不是所有的分片级查问都会被缓存 2.2 缓存设置

June 25, 2021 · 1 min · jiezi

关于elasticsearch:google-file-system-论文学习

一、参考elasticsearch 学习系列目录——更新ing wiki: Google File System 二、架构

June 22, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch基础6-ES的排序

一、参考elasticsearch 学习系列目录——更新ing Sort search results 二、查问中排序

June 21, 2021 · 1 min · jiezi

关于elasticsearch:Linux下安装ElasticSearchheadkinbana

简述Elasticsearch是一个基于Lucene的搜寻服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码公布,是一种风行的企业级搜索引擎。Elasticsearch用于云计算中,可能达到实时搜寻,稳固,牢靠,疾速,装置使用方便。官网客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其余语言中都是可用的。依据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。 Es的由来许多年前,一个刚结婚的名叫 Shay Banon 的就业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始应用 Lucene 的一个晚期版本。 间接应用 Lucene 是很难的,因而 Shay 开始做一个形象层,Java 开发者应用它能够很简略的给他们的程序增加搜寻性能。 他公布了他的第一个开源我的项目 Compass。起初 Shay 取得了一份工作,次要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需要尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。 第一个公开版本在2010年2月公布,从此以后,Elasticsearch 曾经成为了 Github 上最沉闷的我的项目之一,他领有超过300名 contributors(目前736名 contributors )。 一家公司曾经开始围绕 Elasticsearch 提供商业服务,并开发新的个性,然而,Elasticsearch 将永远开源并对所有人可用。 据说,Shay 的妻子还在等着她的食谱搜索引擎… ElasticSearch和Lucene的区别Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个凋谢源代码的全文检索引擎工具包,但它不是一个残缺的全文检索引擎,而是一个全文检索引擎的架构,提供了残缺的查问引擎和索引引擎,局部文本剖析引擎,它能够不便的嵌入到各种利用中实现针对利用的全文索引/检索性能。ElasticSearch是一个基于Lucene的搜寻服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码公布,是以后风行的企业级搜索引擎。设计用于云计算中,可能达到实时搜寻,稳固,牢靠,疾速,装置使用方便。Solr简介Solr 是Apache下的一个顶级开源我的项目,采纳Java开发,它是基于Lucene的全文搜寻服务器。Solr提供了比Lucene更为丰盛的查询语言,同时实现了可配置、可扩大,并对索引、搜寻性能进行了优化 Solr能够独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现办法很简略,用 POST 办法向 Solr 服务器发送一个形容 Field 及其内容的 XML 文档,Solr依据xml文档增加、删除、更新索引 。Solr 搜寻只须要发送 HTTP GET 申请,而后对 Solr 返回Xml、json等格局的查问后果进行解析,组织页面布局。Solr不提供构建UI的性能,Solr提供了一个治理界面,通过治理界面能够查问Solr的配置和运行状况。 solr是基于lucene开发企业级搜寻服务器,实际上就是封装了lucene。 Solr是一个独立的企业级搜寻应用服务器,它对外提供相似于Web-service的API接口。用户能够通过http申请,向搜索引擎服务器提交肯定格局的文件,生成索引;也能够通过提出查找申请,并失去返回后果。 ElasticSearch和Solr的区别

June 21, 2021 · 1 min · jiezi

关于elasticsearch:Nebula-基于-ElasticSearch-的全文搜索引擎的文本搜索

本文首发于 Nebula Graph 公众号 NebulaGraphCommunity,Follow 看大厂图数据库技术实际。 1 背景Nebula 2.0 中曾经反对了基于内部全文搜索引擎的文本查问性能。在介绍这个性能前,咱们先简略回顾一下 Nebula Graph 的架构设计和存储模型,更易于下边章节的形容。 1.1 Nebula Graph 架构简介 如图所示,Storage Service 共有三层,最底层是 Store Engine,它是一个单机版 local store engine,提供了对本地数据的get/put/scan/delete操作,相干的接口放在 KVStore / KVEngine.h 文件外面,用户齐全能够依据本人的需要定制开发相干 local store plugin,目前 Nebula 提供了基于 RocksDB 实现的  Store Engine。 在 local store engine 之上,便是咱们的 Consensus 层,实现了 Multi Group Raft,每一个 Partition 都对应了一组 Raft Group,这里的 Partition 便是咱们的数据分片。目前 Nebula 的分片策略采纳了动态 Hash的形式,具体依照什么形式进行 Hash,在下一个章节 schema 里会提及。用户在创立 SPACE 时需指定 Partition 数,Partition 数量一旦设置便不可更改,一般来讲,Partition 数目要能满足业务未来的扩容需要。 在 Consensus 层下面也就是 Storage Service 的最上层,便是咱们的Storage Interfaces,这一层定义了一系列和图相干的 API。 这些 API 申请会在这一层被翻译成一组针对相应 Partition 的 KV 操作。正是这一层的存在,使得咱们的存储服务变成了真正的图存储,否则,Storage Service 只是一个 KV 存储罢了。而 Nebula 没把 KV 作为一个服务独自提出,其最次要的起因便是图查问过程中会波及到大量计算,这些计算往往须要应用图的 Schema,而 KV 层是没有数据 Schema 概念,这样设计会比拟容易实现计算下推。 ...

June 17, 2021 · 5 min · jiezi

关于elasticsearch:google-bigtable-论文学习

一、参考elasticsearch 学习系列目录——更新ing二、概览

June 15, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch-学习笔记kibana

一、理解ELKELK是Elasticsearch、Logstash、 Kibana三大开源框架首字母大写简称。市面上也被称为Elastic Stack。其中Elasticsearch是一个基于Lucene、分布式、通过Restful形式进行交互的近实时搜寻平台框架。像相似百度、谷歌这种大数据全文搜寻引|擎的场景都可以应用Elasticsearch作为底层反对框架,可见Elasticsearch提供的搜寻能力的确弱小,市面上很多时候咱们简称Elasticsearch为es。Logstash是ELK的地方数据流引擎,用于从不同指标(文件/数据存储/MQ )收集的不同格局数据,通过过滤后反对输入到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana能够将elasticsearch的数据通过敌对的页面展现进去 ,提供实时剖析的功能。收集荡涤数据-->搜寻,存储--> Kibana 市面上很多开发只有提到ELK可能统一说出它是一个日志剖析架构技术栈总称,但实际上ELK不仅仅实用于日志剖析,它还能够反对其它任何数据分析和收集的场景,日志剖析和收集只是更具备代表性。并非唯一性。 二、kibana装置目前 https://www.elastic.co/cn/ 提供es+kibana捆绑下载 或者:https://www.elastic.co/cn/kibana 阐明:kibana和es版本要统一

June 13, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch-学习笔记es基本

一、简介1、当初支流的搜索引擎大略就是:Lucene,Solr,ElasticSearch。 它们的索引建设都是依据倒排索引的形式生成索引,何谓倒排索引?(倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引办法,被用来存储在全文搜寻下某个单词在一个文档或者一组文档中的存储地位的映射。它是文档检索系统中最罕用的数据结构。)2、Lucene是一个Java全文搜索引擎,齐全用Java编写。Lucene不是一个残缺的应用程序,而是一个代码库和API,复杂性较高。3、Solr,ElasticSearch 都是基于Lucene。4、Solr简介 Solr 是Apache下的一个顶级开源我的项目,采纳Java开发,它是基于Lucene的全文搜寻服务器。Solr提供了比Lucene更为丰盛的查询语言,同时实现了可配置、可扩大,并对索引、搜寻性能进行了优化 Solr能够独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现办法很简略,用 POST 办法向 Solr 服务器发送一个形容 Field 及其内容的 XML 文档,Solr依据xml文档增加、删除、更新索引 。Solr 搜寻只须要发送 HTTP GET 申请,而后对 Solr 返回Xml、json等格局的查问后果进行解析,组织页面布局。Solr不提供构建UI的性能,Solr提供了一个治理界面,通过治理界面能够查问Solr的配置和运行状况。 solr是基于lucene开发企业级搜寻服务器,实际上就是封装了lucene。 5、Elasticsearch简介 Elasticsearch是一个实时分布式搜寻和剖析引擎。它让你以前所未有的速度解决大数据成为可能。 它用于全文搜寻、结构化搜寻、剖析以及将这三者混合应用: 维基百科应用Elasticsearch提供全文搜寻并高亮关键字,以及输出实时搜寻(search-asyou-type)和搜寻纠错(did-you-mean)等搜寻倡议性能。 英国卫报应用Elasticsearch联合用户日志和社交网络数据提供给他们的编辑以实时的反馈,以便及时理解公众对新发表的文章的回应。 StackOverflow联合全文搜寻与地理位置查问,以及more-like-this性能来找到相干的问题和答案。 Github应用Elasticsearch检索1300亿行的代码。 然而Elasticsearch不仅用于大型企业,它还让像DataDog以及Klout这样的守业公司将最后的想法变成可扩大的解决方案。Elasticsearch能够在你的笔记本上运行,也能够在数以百计的服务器上解决PB级别的数据 。 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有畛域,Lucene能够被认为是迄今为止最先进、性能最好的、性能最全的搜索引擎库。 然而,Lucene只是一个库。想要应用它,你必须应用Java来作为开发语言并将其间接集成到你的利用中,更蹩脚的是,Lucene非常复杂,你须要深刻理解检索的相干常识来了解它是如何工作的。 Elasticsearch也应用Java开发并应用Lucene作为其外围来实现所有索引和搜寻的性能,然而它的目标是通过简略的 RESTful API 来暗藏Lucene的复杂性,从而让全文搜寻变得简略。 6、Elasticsearch和Solr比拟 7、ElasticSearch vs Solr 总结 (1)es根本是开箱即用,非常简单。Solr装置稍微简单一丢丢 (2)Solr 利用 Zookeeper 进行分布式治理,而 Elasticsearch 本身带有分布式协调治理性能。 (3)Solr 反对更多格局的数据,比方JSON、XML、CSV,而 Elasticsearch 仅反对json文件格式。 (4)Solr 官网提供的性能更多,而 Elasticsearch 自身更重视于外围性能,高级性能多有第三方插件提供,例如图形化界面须要kibana敌对撑持 (5)Solr 查问快,但更新索引时慢(即插入删除慢),用于电商等查问多的利用; ES建设索引快(即查问慢),即实时性查问快,用于facebook新浪等搜寻。Solr 是传统搜寻利用的无力解决方案,但 Elasticsearch 更实用于新兴的实时搜寻利用。 ...

June 13, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch基础5-ES的查询过程

一、参考elasticsearch 学习系列目录——更新ing How to monitor Elasticsearch performance 二、图说申请过程

June 9, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch实战手册阅读2ES智能巡检阿里云EYOU

一、参考elasticsearch 学习系列目录——更新ing 《Elastic Stack 实战手册》早鸟版首发

June 9, 2021 · 1 min · jiezi

关于elasticsearch:Elasticsearch-7x-保留字符qbit

前言本文对 Elasticsearch 7.12 无效query_string 保留字符官网文档: https://www.elastic.co/guide/...+ - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /regex 保留字符官网文档:https://www.elastic.co/guide/.... ? + * | { } [ ] ( ) " \# @ & < > ~query_string 与 regex 保留字符并集+ - = & | > < ! ( ) { } [ ] ^ " ~ * ? : \ / . # @+-=&|><!(){}[]^"~*?:\/.#@本文出自 qbit snap

June 7, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch实战手册阅读1导读

一、参考elasticsearch 学习系列目录——更新ing 《Elastic Stack 实战手册》早鸟版首发 二、导读局部2.1 根底篇内容形容根底介绍 能力组成 技术劣势 专用术语 2.2 入门篇内容形容elastic stack部署 elasticsearch根底利用 kibana根底利用 2.3 进阶篇内容形容CCR/CCS Rollup Data stream 索引生命周期治理 分片治理 Snopshot Watcher Alters Transform Graph 机器学习 elasticsearch SQL Canvas APM Uptime Enterprise Search SIEM Endpoint Security 集群治理及监控 Elasticsearch 各类语言开发示例

June 3, 2021 · 1 min · jiezi

关于ElasticSearch:图解ElasticSearch-搜索原理看完就明白了

先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图答复以下问题: 为什么我的搜寻 *foo-bar* 无奈匹配 foo-bar ?为什么减少更多的文件会压缩索引(Index)?为什么ElasticSearch占用很多内存?版本elasticsearch版本: elasticsearch-2.2.0 云上的集群 集群里的盒子云外面的每个红色正方形的盒子代表一个节点——Node。 节点之间在一个或者多个节点间接,多个绿色小方块组合在一起造成一个ElasticSearch的索引。 索引里的小方块在一个索引下,散布在多个节点里的绿色小方块称为分片——Shard。 Shard=Lucene Index一个ElasticSearch的Shard实质上是一个Lucene Index。这篇 ElasticSearch 具体应用教程,外部分享时被老大褒扬了 Lucene是一个Full Text 搜寻库(也有很多其余模式的搜寻库),ElasticSearch是建设在Lucene之上的。接下来的故事要说的大部分内容实际上是ElasticSearch如何基于Lucene工作的。超具体 116 页 Elasticsearch 实战文档!高清可下载 图解LuceneMini索引——segment在Lucene外面有很多小的segment,咱们能够把它们看成Lucene外部的mini-index。 Segment外部有着许多数据结构 Inverted IndexStored FieldsDocument ValuesCache 最最重要的Inverted Index Inverted Index次要包含两局部: 一个有序的数据字典Dictionary(包含单词Term和它呈现的频率)。与单词Term对应的Postings(即存在这个单词的文件)。当咱们搜寻的时候,首先将搜寻的内容合成,而后在字典里找到对应Term,从而查找到与搜寻相干的文件内容。Elasticsearch 查问数据的工作原理是什么? 查问“the fury” 主动补全(AutoCompletion-Prefix)如果想要查找以字母“c”结尾的字母,能够简略的通过二分查找(Binary Search)在Inverted Index表中找到例如“choice”、“coming”这样的词(Term)。ElasticSearch 亿级数据检索案例实战! 低廉的查找如果想要查找所有蕴含“our”字母的单词,那么零碎会扫描整个Inverted Index,这是十分低廉的。 在此种状况下,如果想要做优化,那么咱们面对的问题是如何生成适合的Term。 问题的转化 对于以上诸如此类的问题,咱们可能会有几种可行的解决方案: * suffix -> xiffus *如果咱们想当前缀作为搜寻条件,能够为Term做反向解决。 (60.6384, 6.5017) -> u4u8gyykk对于GEO地位信息,能够将它转换为GEO Hash。 123 -> {1-hundreds, 12-tens, 123}对于简略的数字,能够为它生成多重模式的Term。 解决拼写错误一个Python库 为单词生成了一个蕴含谬误拼写信息的树形状态机,解决拼写错误的问题。 Stored Field字段查找当咱们想要查找蕴含某个特定题目内容的文件时,Inverted Index就不能很好的解决这个问题,所以Lucene提供了另外一种数据结构Stored Fields来解决这个问题。实质上,Stored Fields是一个简略的键值对key-value。默认状况下,ElasticSearch会存储整个文件的JSON source。 Document Values为了排序,聚合即便这样,咱们发现以上构造依然无奈解决诸如:排序、聚合、facet,因为咱们可能会要读取大量不须要的信息。 ...

June 1, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch-实现聚合后两个字段相除相加相减相乘运算

有个需要,在sql中的计算形式是: sum(cost) / 100 / sum(view_count) * 1000统计出均匀千次展示均价,老本按分存储。 在es中须要聚合cost和view_count 之后再运算。折腾了半天,记录下: "aggs" => [ 'total_cost_count' => [ 'sum' => [ 'field' => 'cost' ] ], 'total_view_count' => [ 'sum' => [ 'field' => 'view_count' ] ], '(total_cost / total_view)' => [ 'bucket_script' => [ 'buckets_path' => [ 'cost' => 'total_cost_count', 'view_count' => 'total_view_count', ], 'script' => [ 'source' => "params.cost / params.unit / params.view_count * params.days", 'params' => [ 'unit' => 100, 'days' => 1000, ] ] ] ]],调试过程中报错信息: ...

May 28, 2021 · 1 min · jiezi

关于elasticsearch:Elasticsearch数据库优化实战让你的ES飞起来

摘要:ES曾经成为了全能型的数据产品,在很多畛域越来越受欢迎,本文旨在从数据库畛域剖析ES的应用。本文分享自华为云社区《Elasticsearch数据库减速实际》,原文作者:css_blog 。 一、计划阐明Elasticsearch次要性能是什么,不同的场景有不同的定位,在日志场景咱们能够用ELK生态搭建日志剖析零碎,在搜寻畛域ES是以后最热门的搜索引擎。在大数据畛域,ES能够对标Hbase提供海量日志的数据仓库;在数据库畛域ES能够作为查问剖析型的剖析型数据库应用。ES曾经成为了全能型的数据产品,在很多畛域越来越受欢迎,本文旨在从数据库畛域剖析ES的应用。 ES不是关系型数据库,数据更新采纳乐观锁,通过版本号管制,不反对事务处理,这也是ES区别于传统数据库(Mysql)的中央;然而ES反对准确查问减速,多条件任意组合查问,多种聚合查问,查问速度很快,能够代替数据库简单条件查问的场景需要,甚至能够代替数据库做二级索引。 在数据库减速场景通常的做法是客户产生的商品订单数据会写入Mysql类关系型数据库,数据库写入保障事务性,然而随着商品订单的数据越来越多,同时客户查问的条件多变,无奈所有字段都建设索引,数据库的查问能力远远不能满足查问诉求。咱们思考用ES全量同步数据库数据,在ES中做多条件聚合查问,查问的后果能够在Mysql中做关联搜寻,在查问商品订单详情展现, Mysql数据和ES数据能够不要求实时统一,能够通canal生产Mysql binlog日志信息, 同步到ES,实现一次写入,保证数据一致性。以下数据库都以Mysql为例进行阐明。 二、索引原理剖析ES为什么查问能力远远超过Mysql关系型数据库,次要是他们的实现原理和底层存储的数据结构差别决定的,以下比拟两种产品的实现原理。 Elasticsearch会对所有输出的文本进行解决,建设索引放入内存中,从而进步搜寻效率。在这一点上ES要优于MySQL的B+树的构造,MySQL须要将索引放入磁盘,每次读取须要先从磁盘读取索引而后寻找对应的数据节点,然而ES可能间接在内存中就找到指标文档对应的大抵地位,最大化提高效率。并且在进行组合查问的时候MySQL的劣势更加显著,它不反对简单的组合查问比方聚合操作,即便要组合查问也要当时建好索引,然而ES就能够实现这种简单的操作,默认每个字段都是有索引的,在查问的时候能够各种相互组合。 (1)数据库索引B+树数据库中索引都是以树来组织的,罕用的有B tree,B-tree,B+tree,以下介绍B+tree的组织构造。 首先咱们先设想下为什么须要建设索引,假如咱们有一张表book,存储了咱们放弃的书籍信息,名称,作者,公布工夫等,咱们有10000条记录,如果咱们须要找一本为《database》的书,那咱们的SQL为: select name,author form book where name = ‘database’;咱们须要扫描整个表,全量比拟才能够,如果咱们对name建设索引,书名曾经依照程序排序,查问时只须要找到对应地位就能够疾速获取后果。 索引的实质是通过一直地放大想要获取数据的范畴来筛选出最终想要的后果,同时把随机的事件变成程序的事件,也就是说,有了这种索引机制,咱们能够总是用同一种查找形式来锁定数据。 数据库采纳B+tree建设索引: B+tree 数据只存储在叶子节点中。这样在B树的根底上每个节点存储的要害字数更多,树的层级更少所以查问数据更快,所有指关键字指针都存在叶子节点,所以每次查找的次数都雷同所以查问速度更稳固。 (2)Elasticsearch索引原理ES建设索引采纳倒排索引的形式存储。 对输出的所有数据都建设索引,并且把所有和文档对应起来,在咱们查找数据的时候咱们间接查找词典(Term),在找到Term对应的文档ID,进而找到数据。这和Mysql应用B+tree树建设索引的形式相似,然而如果词典Term很大,对Term的搜寻就会很慢,ES进一步倡议了词典索引(FST),晋升词典的搜寻能力。 Term Index 以树的模式保留在内存中,使用了FST+压缩公共前缀办法极大的节俭了内存,通过Term Index查问到Term Dictionary所在的block再去磁盘上找term缩小了IO次数。 Term Dictionary 排序后通过二分法将检索的工夫复杂度从原来N升高为logN。 三、查问比照剖析以下对于数据库搜寻罕用的场景比照ES和数据库: 全文检索ES反对全文检索,能够对数据分词,每个词通过FSP建设词典索引,而Mysql关系数据库则不反对,设想下如果搜寻的不是整个字段而是字段中的几个关键词,应用Mysql搜寻必须全表扫描。 准确搜寻如果Mysql对该字段建设过索引,应用ES搜寻和Mysql搜寻性能差别不大,可能Mysql更快点,然而ES是分布式系统,能够反对PB级别的数据搜寻,对大表搜寻ES劣势更显著。 多条件查问咱们晓得Mysql须要对字段建设索引能力减速搜寻过程,而ES默认是全索引的,对于多条件查问,触发Mysql建设联结索引,否则多个字段搜寻,Mysql 先抉择一个字段搜寻,后果在应用第二个字段过滤失去最终后果。 ES则采纳多个字段后果集交并操作,应用bitmap或者skiplist放慢搜寻速度,相比Mysql劣势显著。 聚合搜寻Mysql聚合搜寻如果没有建设索引须要全表扫描排序,如果建设索引在B+tree上进行范畴查问。 ES为了放慢聚合搜寻速度,通过Doc value来解决聚合搜寻问题。DocValue就是列式存储。 存储后果如下: Docvalue数据依照文档ID排序,DocValue将随机读取变成了程序读取,在es中,因为分片的存在,数据被拆分成多份,放在不同机器上。然而给用户体验却如同只有一个库一样。对于聚合查问,其解决是分两阶段实现的: Shard 本地的 Lucene Index 并行计算出部分的聚合后果。收到所有的 Shard 的部分聚合后果,聚合出最终的聚合后果。这种两阶段聚合的架构使得每个 shard 不必把原数据返回,而只用返回数据量小得多的聚合后果。这样极大的缩小了网络带宽的耗费。 多正本减速咱们晓得ES有shard和replica的概念,正本一方面能够保证数据的可靠性,另一方面多正本能够放慢搜寻速度进步搜寻并发能力。 四、数据库到Elasticsearch同步计划联合用户理论的应用形式和数据量的大小,Mysql数据到ES能够有多种不同的形式抉择。 Canal=>Elasticsearch应用Canal间接生产Mysql binlog日志写入ES,这种形式如果Mysql写入量大,会面临Canal写入阻塞问题。 Canal =>Kafka=>ElasticsearchCanal数据写入到Kafka,应用另外的app生产Kafka数据同步到ES 五、问题汇总1.索引shard问题在Mysql数据同步到ES中面临索引的建设的问题,在数据写入ES之前咱们须要提前布局数据的shards和replicas的个数,replicas 能够动静批改,然而shards数创立实现后不能批改。 随着Mysql数据量的减少,如果shard太少,就会导致每个shard的数据量太大的问题。 如果一个索引600G,只有3 个shard,每个shard就200G,会极大的损耗查问能力,也不利于数据迁徙。 咱们能够依照月来滚动创立索引,通过索引别名把所有索引关联起来应用。 test_data-202101test_data-2021022.查问减速问题在应用ES对数据库进行减速的场景,咱们心愿的是ES查问能力尽可能快。在ES查问不满足要求的时候咱们须要对查问进行调优。 罕用的办法有: 点击关注,第一工夫理解华为云陈腐技术~ ...

May 18, 2021 · 1 min · jiezi

关于elasticsearch:ES最大内存为什么设置为32G

elasticsearch分配内存的配置: 1、设置变量的形式: export ES_HEAP_SIZE=32G 该形式比拟好 2、启动es时增加启动差数: -Xmx 32G -Xms 32G ,Xmx和Xms的大小最好一样,避免程序在运行时扭转大小。es最大调配32G内存的起因: 1、内存对于Elasticsearch来说相对是重要的,用于更多的内存数据提供更快的操作。而且还有一个内存耗费小户-LuceneLucene的设计目标是把底层OS里的数据缓存到内存中。Lucene的段是别离存储到单个文件中的,这些文件都是不会变动的,所以很利于缓存,同时操作系统也会把这些段文件缓存起来,以便更快的拜访。 Lucene的性能取决于和OS的交互,如果你把所有的内存都调配给Elasticsearch,不留一点给Lucene,那你的全文检索性能会很差的。 最初规范的倡议是把50%的内存给elasticsearch,剩下的50%也不会没有用途的,Lucene会很快吞噬剩下的这部分内存。不要超过32G 2、不调配大内存给Elasticsearch,事实上jvm在内存小于32G的时候会采纳一个内存对象指针压缩技术。在java中,所有的对象都调配在堆上,而后有一个指针援用它。指向这些对象的指针大小通常是CPU的字长的大小,不是32bit就是64bit,这取决于你的处理器,指针指向了你的值的准确地位。 对于32位零碎,内存最大可应用4G。64零碎能够应用更大的内存。然而64位的指针意味着更大的节约,因为你的指针自身大了。节约内存不算,更蹩脚的是,更大的指针在主内存和缓存器之间挪动数据的时候,会占用更多的带宽。 java 应用一个叫内存指针压缩的技术来解决这个问题。它的指针不再示意对象在内存中的准确地位,而是示意偏移量。这意味着32位的指针能够援用40亿个对象,而不是40亿个字节。最终,也就是说堆内存长到32G的物理内存,也能够用32bit的指针示意。 一旦你越过那个神奇的30-32G的边界,指针就会切回一般对象的指针,每个对象的指针都变长了,就会应用更多的CPU内存带宽,也就是说你实际上失去了更多的内存。事实上当内存达到40-50GB的时候,无效内存才相当于应用内存对象指针压缩技术时候的32G内存。 这段形容的意思就是说:即使你有足够的内存,也尽量不要超过32G,因为它节约了内存,升高了CPU的性能,还要让GC应答大内存。 swapping是性能的坟墓 这是不言而喻的,然而还是有必要说的更分明一点,内存替换到磁盘对服务器性能来说是致命的。想想看一个内存的操作必须是疾速的。如果内存替换到磁盘上,一个100微秒的操作可能变成10毫秒,再想想那么多10微秒的操作时延累加起来。不难看出swapping对于性能是如许可怕。最好的方法就是在你的操作系统中齐全禁用swapping。这样能够临时禁用:sudo swapoff -a 为了永恒禁用它,你可能须要批改/etc/fstab文件

May 17, 2021 · 1 min · jiezi

关于elasticsearch:es-cat系列命令

在应用Elasticsearch过程中.常常在Kinana或者command line中应用cat命令获取es中的状态或者一些数据之间的关系.cat命令也是es中应用频率比拟高的命令 列出所有_cat命令GET _cat/cat命令公共参数1: verbose每个命令都反对应用?v参数,来显示具体的信息 # 获取集群状态GET _cat/health# 当应用v参数是 会显示列名的详细信息GET _cat/health?v2:help获取以后命令每一列的信息阐明 # 这里对照不加help的命令能够显示每一列的信息阐明GET _cat/health?help3:header强制显示指定列的信息,不必全副输入.h前面跟多个参数用,宰割,参数名能够简写 # 显示所有的node信息GET _cat/nodes?v# 只显示ip和load_5m这两列GET _cat/nodes?v&h=ip,load_5m4:numeric formats(数组格式化)对于数字显示,能够显示单位 例如:bytes=b.能够设置排序形式, 例如:s=store.size:desc示意依据store字段降序排列 # 显示左右索引并依照存储大小排序GET _cat/indices?v&s=store.size:desc5: response_as_text_json_smile_yaml_or_cbor设置输入显示格局.默认依照text格局显示 # 通过json格局显示输入GET _cat/indices?v&format=json&pretty5:sort通过指定列进行排序.多个排序字段通过逗号宰割 # 列出说有templates,依照order降序,version降序GET /_cat/templates?v&s=order:desc,version:desccat命令=^.^=# 磁盘还有数据调配信息/_cat/allocation/_cat/shards/_cat/shards/{index}/_cat/master/_cat/nodes/_cat/tasks/_cat/indices/_cat/indices/{index}/_cat/segments/_cat/segments/{index}# 集群或者索引文档数量 /_cat/count/_cat/count/{index}/_cat/recovery/_cat/recovery/{index}/_cat/health/_cat/pending_tasks# 索引别名/_cat/aliases/_cat/aliases/{alias}/_cat/thread_pool/_cat/thread_pool/{thread_pools}# 插件列表/_cat/plugins/_cat/fielddata/_cat/fielddata/{fields}# 获取node属性信息/_cat/nodeattrs/_cat/repositories/_cat/snapshots/{repository}/_cat/templates/_cat/ml/anomaly_detectors/_cat/ml/anomaly_detectors/{job_id}/_cat/ml/trained_models/_cat/ml/trained_models/{model_id}/_cat/ml/datafeeds/_cat/ml/datafeeds/{datafeed_id}/_cat/ml/data_frame/analytics/_cat/ml/data_frame/analytics/{id}/_cat/transforms/_cat/transforms/{transform_id}参考文档https://www.elastic.co/guide/... (基于es7.9版本)

May 16, 2021 · 1 min · jiezi

关于elasticsearch:这篇-ElasticSearch-详细使用教程内部分享时被老大表扬了

本文介绍了ElasticSearch的必备常识:从入门、索引治理到映射详解。 一、疾速入门1.查看集群的健康状况http://localhost:9200/_cat http://localhost:9200/_cat/he... 阐明:v是用来要求在后果中返回表头 #状态值阐明Green - everything is good (cluster is fully functional),即最佳状态Yellow - all data is available but some replicas are not yet allocated (cluster is fully functional),即数据和集群可用,然而集群的备份有的是坏的Red - some data is not available for whatever reason (cluster is partially functional),即数据和集群都不可用查看集群的节点http://localhost:9200/_cat/?v 2. 查看所有索引http://localhost:9200/_cat/in... 3. 创立一个索引创立一个名为 customer 的索引。pretty要求返回一个丑陋的json 后果 PUT /customer?pretty 再查看一下所有索引 http://localhost:9200/_cat/in... GET /_cat/indices?v 4. 索引一个文档到customer索引中curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: application/json' -d'{ "name": "John Doe"}'5. 从customer索引中获取指定id的文档curl -X GET "localhost:9200/customer/_doc/1?pretty"6. 查问所有文档GET /customer/_search?q=*&sort=name:asc&prettyJSON格局形式 ...

May 13, 2021 · 7 min · jiezi

关于elasticsearch:elasticsearch基础4-复合聚合

一、参考elasticsearch 学习系列目录——更新ing Composite aggregation Composite aggregation ORDER BY 二、产生起因当有多层聚合须要时候,应用composite聚合,能够更好的分页 三、sources类型sources参数中定义了,复合聚合的组成源数据 测试数据 GET kibana_sample_data_logs/_search{ "size": 1}{ "took" : 2, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 10000, "relation" : "gte" }, "max_score" : 1.0, "hits" : [ { "_index" : "kibana_sample_data_logs", "_type" : "_doc", "_id" : "4O9NX3kBTG9UhPTpZasD", "_score" : 1.0, "_source" : { "agent" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)", "bytes" : 7525, "clientip" : "60.103.76.51", "extension" : "css", "geo" : { "srcdest" : "IN:TW", "src" : "IN", "dest" : "TW", "coordinates" : { "lat" : 35.23199833, "lon" : -102.3990931 } }, "host" : "cdn.elastic-elastic-elastic.org", "index" : "kibana_sample_data_logs", "ip" : "60.103.76.51", "machine" : { "ram" : 2147483648, "os" : "ios" }, "memory" : null, "message" : "60.103.76.51 - - [2018-08-10T10:14:00.227Z] \"GET /styles/ads.css HTTP/1.1\" 200 7525 \"-\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\"", "phpmemory" : null, "referer" : "http://twitter.com/success/sandra-magnus", "request" : "/styles/ads.css", "response" : 200, "tags" : [ "success", "security" ], "timestamp" : "2021-05-21T10:14:00.227Z", "url" : "https://cdn.elastic-elastic-elastic.org/styles/ads.css", "utc_time" : "2021-05-21T10:14:00.227Z", "event" : { "dataset" : "sample_web_logs" } } } ] }}3.1 terms一般的terms聚合 ...

May 12, 2021 · 6 min · jiezi

关于elasticsearch:GitHub星标数超4万的火爆之作ElasticSearch你值得拥有

Hello,明天给各位童鞋们分享ElasticSearch,连忙拿出小本子记下来吧! (一)介绍ElasticSearch的指标就是实现搜寻。在数据量少的时候,咱们能够通过索引去搜寻关系型数据库中的数据,然而如果数据量很大,搜寻的效率就会很低,这个时候咱们就须要一种分布式的搜索引擎。Elasticsearch是一个基于Lucene的搜寻服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。 ES次要用于全文检索、结构化搜寻以及剖析。ES的利用非常宽泛,比方维基百科、Github等都应用ES实现搜寻。 (二)外围概念了解2.1 数据结构ES既然是用来搜寻的,那么它必然也须要存储数据。在Mysql等关系型数据库中,数据的存储遵循上面的逻辑: 一个数据库(database)中有多个表(tables),每个表有多行数据(rows),每一行数据由多个字段(columns)组成。 ES中的存储是这样的: 一个索引(indeces)相当于一个数据库(database),每个索引中有多个类型types(相当于表构造),每个索引中有多个documents(相当于行),每个documents由多个fields组成(相当于字段)。 你能够把ES了解为他是一个面向文档的数据库。上面用一张图形容ES和关系型数据库之间的相似之处: 值得注意的是,在ES7.x版本中,types将缓缓被遗弃,在8.x版本中,types将会彻底弃用。 2.2 索引(indeces)和文档(documents)ES中的索引和Mysql中的索引不是同一种货色,ES中的索引是一个文档的汇合,索引就是一个数据库。 后面说了ES是面向文档的,文档是ES中最重要的单位,文档就是一条条的数据。文档中有几个重要的概念: 1、一篇文档中蕴含多个key:value 2、文档其实就是一个JSON字符串 2.3 分片 ES是一个分布式搜索引擎,分片就是把一堆数据分布到多个分片中。而索引是对每个分片的一个备份,这些正本同样能解决查问申请。 当初假如集群有两个node节点,设置分片数是5个,正本数是1个,那么数据存储构造将变成上面这样,能够保障正本和分片在不同的节点上: 2.4 倒排索引为什么ES的搜寻这么快,和其中所应用的倒排索引也有肯定的关系。倒排索引建设的是分词和文档之间的映射关系。上面通过一个简略的例子来解说一下什么是倒排索引 原来的数据中咱们通过文档ID去关联标签,然而在查问时就须要遍历所有文档。通过倒排索引,咱们能够通过关键词来找到最匹配的文档。 (三)ES的基本操作ES是基于Restful格调进行操作的,因而对于习惯了写crud的程序员来说,ES很容易上手。ES的操作能够应用Kibana,也能够应用Postman间接调用,因为归根结底它就是一个restful的操作。我这里应用Idea的ES插件间接调用。 3.1创立文档PUT http://ip:port/索引名/类型名/... { "key":"value"} 因为类型名在后续的版本中将会被删除,这里能够用_doc代表默认类型: PUT http://ip:port/索引名/_doc/文... 上面给出操作截图 通过put创立一个索引之后,咱们能够在head中看到对应的数据 3.2 创立带有数据类型的索引3.1中创立数据时,没有指定具体的数据类型,咱们当然也能够为索引指定数据类型 PUT http://ip:port/索引名 参数示例: { "mappings": { "properties": { "name": { "type": "text" }, "address": { "type": "text" }}} } ES中的外围数据类型如下: (1)字符串类型: text, keyword (2)数字类型:long, integer, short, byte, double, float, half_float, scaled_float (3)日期:date (4)日期 纳秒:date_nanos (5)布尔型:boolean ...

May 8, 2021 · 2 min · jiezi

关于elasticsearch:云原生多模数据库Lindorm初识

一、参考云原生多模数据库 Lindorm二、部署装置

May 8, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch实际总结3慢日志分析

一、参考elasticsearch 学习系列目录——更新ing search log analyzer 二、Opster2.1 装置运行es download kibana download tar -xzvf elasticsearch-7.12.1-darwin-x86_64.tar.gzcd elasticsearch-7.12.1/./bin/elasticsearchtar -xzvf kibana-7.12.1-darwin-x86_64.tar.gzcd work/esEnv/kibana-7.12.1-darwin-x86_64./bin/kibana2.2 设置慢查问 PUT kibana_sample_data_logs/_settings{ "index.search.slowlog.threshold.query.warn": "100ms", "index.search.slowlog.threshold.query.info": "50ms", "index.search.slowlog.threshold.query.debug": "10ms", "index.search.slowlog.threshold.query.trace": "60ms", "index.search.slowlog.threshold.fetch.warn": "100ms", "index.search.slowlog.threshold.fetch.info": "50ms", "index.search.slowlog.threshold.fetch.debug": "20ms", "index.search.slowlog.threshold.fetch.trace": "60ms", "index.search.slowlog.level": "debug"}接下来,在kibana中模仿查问,产生一些慢查问日志 2.3 剖析慢查问日志

May 8, 2021 · 1 min · jiezi

关于elasticsearch:NFSSnapShot快照式备份迁移ES索引过程

环境搭建:es主NFS服务端192.168.72.145es从NFS客户端192.168.72.162es从NFS客户端192.168.72.163[root@localhost ~ ] cat /etc/redhat-releaseCentos Linux release 7.6.1810 (core)敞开防火墙: systemctl stop firewalld永恒敞开防火墙: systemctl disable firewalld敞开selinux: sentenforce 0永恒敞开selinux: vim /etc/sysconfig/selinux搭建、启动es集群nfs服务端操作以下命令在192.168.72.145操作 装置nfs链接: https://pan.baidu.com/s/17p1f... 明码: ddgq cd /nfsrpm -ivh --nodeps --force *.rpm启动nfsCentOS 6 执行上面命令 service rpcbind startservice nfs startCentOS 7 执行上面命令 systemctl start rpcbind.servicesystemctl start nfs-server.service开机自启nfs systemctl enable rpcbind.servicesystemctl enable nfs-server.service创立共享目录mkdir -p /data/es/backupchown -R elasticsearch.elasticsearch /data/es/backupchmod 777 /data/es/backup批改配置文件追加以下内容/data/es/backup *(rw,sync,no_root_squash,no_subtree_check)刷新配置立刻失效exportfs -a查看可挂载目录showmount -e 192.168.72.145客户端操作以下命令在192.168.72.162、192.168.72.163操作。与服务端一样,装置启动NFS。 创立共享目录、受权共享目录(不必批改配置文件/etc/exports)mkdir -p /data/es/backupchown -R elasticsearch.elasticsearch /data/es/backupchmod 777 /data/es/backup挂载目录查看可挂载目录 mount -t nfs 192.168.72.145:/data/es/backup/ /data/es/backup设置开机主动挂载vi /etc/fstab192.168.72.145:/data/es/backup/ /data/es/backup nfs defaults 0 0批改 ES 配置,重启es集群在 elasticsearch.yml 中增加上面配置来设置备份仓库门路path.repo: ["/data/es/backup"] (此处是客户端创立的共享目录门路) ...

May 3, 2021 · 1 min · jiezi

关于elasticsearch:独家深度-一文看懂-ClickHouse-vs-Elasticsearch谁更胜一筹

简介:本文的宗旨在于通过彻底分析ClickHouse和Elasticsearch的内核架构,从原理上讲明确两者的优劣之处,同时会附上一份笼罩多场景的测试报告给读者作为参考。 作者:阿里云数据库OLAP产品部 仁劼 Clickhouse是俄罗斯搜寻巨头Yandex开发的齐全列式存储计算的剖析型数据库。ClickHouse在这两年的OLAP畛域中始终十分热门,国内互联网大厂都有大规模应用。Elasticsearch是一个近实时的分布式搜寻剖析引擎,它的底层存储齐全构建在Lucene之上。简略来说是通过扩大Lucene的单机搜寻能力,使其具备分布式的搜寻和剖析能力。Elasticsearch通常会和其它两个开源组件Logstash(日志采集)和Kibana(仪表盘)一起提供端到端的日志/搜寻剖析的性能,经常被简称为ELK。 明天很多用户在理论的业务场景中,经常面对ClickHouse和Elasticsearch技术选型的难题。用户对ClickHouse和Elasticsearch的内核常识理解有余,往往只能通过性能测试的伎俩来进行选型。本文的宗旨在于通过彻底分析ClickHouse和Elasticsearch的内核架构,从原理上讲明确两者的优劣之处,同时会附上一份笼罩多场景的测试报告给读者作为参考。 分布式架构 Elasticsearch和ClickHouse都是反对分布式多机的数据产品,这里作者首先要比对的就是两者的分布式架构差别,分布式结构设计对产品的易用性和可扩展性具备十分重要的影响。在分布式架构上,外围要解决的几个问题包含:节点发现、Meta同步、正本数据同步。Elasticsearch作为一个老牌的开源产品,在这块上做的绝对比拟成熟。原生的节点发现、Meta同步协定,给用户十分好的易用性体验。Elasticsearch的Meta同步协定须要解决的问题其实和开源的Raft协定十分类似,只不过在Elasticsearch诞生的时候还没有Raft呈现,所以就只能本人入手搞一个了。通过这么多年的打磨,Elasticsearch的Meta同步协定也是相当成熟了。依靠于此,Elasticsearch具备十分易用的多角色划分,auto schema inference等性能。值得一提的是Elasticsearch的多正本数据同步,并没有复用Meta同步协定,而是采纳传统的主备同步机制,由主节点负责同步到备节点,这种形式会更加简略高效。 ClickHouse的分布式架构能力绝对会简略一些,这也是因为ClickHouse还是一个比拟年老的开源产品,还处在分布式易用性一直迭代回升的阶段。ClickHouse引入了外置的ZooKeeper集群,来进行分布式DDL工作(节点Meta变更)、主备同步工作等操作的下发。多正本之间的数据同步(data shipping)工作下发也是依赖于ZooKeeper集群,但最终多正本之间的数据传输还是通过Http协定来进行点对点的数据拷贝,同时多正本都可写,数据同步是齐全多向的。至于节点发现,ClickHouse目前都没有这方面的能力,都是须要通过手动配置集群节点地址来解决。ClickHouse目前这种脚手架式的分布式架构,导致它具备极强的灵便部署能力和运维染指能力,对用户的易用性略差,用户门槛绝对较高,然而在能力下限方面,ClickHouse的分布式部署扩展性并没有短板,集群规模下限比照Elasticsearch没有差别。ClickHouse架构扁平,没有前端节点和后端节点之分,可部署任意规模集群。同时ClickHouse在多正本性能上有更细粒度的控制能力,能够做到表级别正本数配置,同一物理集群可划分多个逻辑集群,每个逻辑机器可任意配置分片数和正本数。 存储架构 写入链路设计 写入吞吐能力是大数据场景下的一项外围指标,用户对大数据产品的要求不光是要存的下,还要写得快。这里首先介绍Elasticsearch的实时写入链路设计:在Elasticsearch的每一个Shard中,写入流程分为两局部,先写入Lucene,再写入TransLog。写入申请达到Shard后,先写Lucene内存索引,此时数据还在内存外面,接着去写TransLog,写完TransLog后,刷新TransLog数据到磁盘上,写磁盘胜利后,申请返回给用户。这里有几个关键点,一是把写Lucene放在了最后面,次要是避免用户的写入申请蕴含“非法”的数据。二是写Lucene索引后,并不是可被搜寻的,须要通过refresh把内存的对象转成残缺的Segment后,而后再次reopen后能力被搜寻,这个refresh工夫距离是用户可设定的。能够看出Lucene索引并没有写入实时可见的能力,所以Elasticsearch是一个近实时(Near Real Time)的零碎。最初是每隔一段比拟长的工夫,比方30分钟后,Lucene会把内存中生成的新Segment刷新到磁盘上,刷新后索引文件曾经长久化了,历史的TransLog就没用了,才会清空掉旧的TransLog。 Elasticsearch单Shard写入链路ClickHouse单Shard写入链路 比照Elasticsearch的写入链路,ClickHouse的写入形式更加“简略间接”、极致,下面曾经讲过Elasticsearch是一个近实时零碎,内存存储引擎中新写入的数据须要定时flush才可见。而ClickHouse则是罗唆彻底放弃了内存存储引擎这一性能,所有的数据写入时间接落盘,同时也就省略了传统的写redo日志阶段。在极高写入吞吐要求的场景下,Elasticsearch和ClickHouse都须要为了晋升吞吐而放弃局部写入实时可见性。只不过ClickHouse主推的做法是把数据提早攒批写入交给客户端来实现。另外在多正本同步上,Elasticsearch要求的是实时同步,也就是写入申请必须写穿多个正本才会返回,而ClickHouse是依赖于ZooKeeper做异步的磁盘文件同步(data shipping)。在实战中ClickHouse的写入吞吐能力能够远远超过同规格的Elasticsearch。 Segment vs DataPart Elasticsearch和ClickHouse的存储设计表面上看起来十分类似,但能力却又截然不同。Elasticsearch的磁盘文件由一个个Segment组成,Segment实际上是一份最小单位的Lucene索引,对于Segment外部的存储格局这里不展开讨论。而Segment又会在后盾异步合并,这里合并次要解决两个问题:1)让二级索引更加有序;2)实现主键数据变更。二级索引是一种“全局”有序的索引,全副数据构建到一个索引外面比构建到多个索引里对查问的减速更显著。Elasticsearch是反对主键删除更新的,这都是依靠于Lucene索引的删除性能来实现的,更新操作会被转换成删除操作加写入操作。当Lucene索引的Segment里存在多条删除记录时,零碎就须要通过Segment合并来剔除这些记录。在多个Segment进行合并的时候,Lucene索引中的存储数据体现出的是append-only的合并,这种形式下二级索引的合并就不须要进行“重排序”。 比照Elasticsearch中的Segment,ClickHouse存储中的最小单位是DataPart,一次批量写入的数据会落盘成一个DataPart。DataPart外部的数据存储是齐全有序的状态(依照表定义的order by排序),这种有序存储就是一种默认聚簇索引能够用来减速数据扫描。ClickHouse也会对DataPart进行异步合并,其合并也是用来解决两个问题:1)让数据存储更加有序;2)实现主键数据变更。DataPart在合并存储数据时体现出的是merge-sorted的形式,合并后产生的DataPart依然处于齐全有序状态。依赖于DataPart存储齐全有序的设定,ClickHouse实现主键数据更新的形式和Elasticsearch截然不同。 Elasticsearch在变更主键时,采纳的是“先查原纪录-生成新记录-删除原纪录-写入新纪录”的形式,这种形式齐全限制住了主键更新的效率,主键更新写入和append-only写入的效率差别十分大。而ClickHouse的主键更新是齐全异步进行的,主键雷同的多条记录在异步合并的时候会产生最新的记录后果。这种异步批量的主键更新形式比Elasticsearch更加高效。 最初总结一下Segment和DataPart外部文件存储的能力差异,Segment齐全就是Lucene索引的存储格局,Lucene索引在倒排文件上的存储毋庸置疑是做到极致的,Lucene索引同时也提供了行存、列存等不同格局的原数据存储。 Elasticsearch默认都会把原数据存两份,一份在行存里,一份在列存里。Elasticsearch会依据查问的pattern,抉择扫描的适合的存储文件。原生ClickHouse的DataPart中并没有任何二级索引文件,数据齐全按列存储,ClickHouse实现的列存在压缩率、扫描吞吐上都做到了极致。相对而言Elasticsearch中的存储比拟中庸,并且老本至多翻倍。 再谈Schemaless 讲到Elasticsearch的个性,大家都会提到Schemaless这个词,Elasticsearch能够主动推断写入数据的json-shema,依据写入数据的json-schema调整存储表的Meta构造,这能够帮忙用户节俭很多建表、加列的麻烦。然而在作者看来,Elasticsearch的这种能力其实叫auto schema inference更为失当,这都得益于Elasticsearch的分布式Meta同步能力。而Elasticsearch的存储其实是须要schema的,甚至是强绑定schema的,因为它是以二级索引为外围的存储,没有类型的字段又如何能构建索引呢?真正的Schemaless应该是能够灵便高效变更字段类型,同时保障查问性能不会大幅降落的能力。明天用户想变更Elasticsearch index中的某个字段类型,那只有一种办法:就是把整份数据数据reindex。绝对比,ClickHouse的存储反而不是强绑定schema的,因为ClickHouse的剖析能力是以存储扫描为外围的,它是能够在数据扫描进行动静类型转换,也能够在DataPart合并的时候缓缓异步调整字段的类型,在查问的时候字段类型变更引起的代价也就是运行时减少cast算子的开销,用户不会感触到急剧的性能降落。作者认为Schemeless相对不是Elasticsearch的护城河能力,绝对反而是它的弱项。至于auto schema inference,这是对小规模用户十分敌对的能力,但它永远不可能能帮用户创立出性能最佳的Schema,在大数据量场景下大家还是须要依据具体的查问需要来创立Schema,所有的便当最初都是有老本代价的。 查问架构 计算引擎 作者在这里把ClickHouse和Elasticsearch摆在一起讲计算引擎其实有些荒诞的滋味,因为Elasticsearch实现的只是一个通用化搜索引擎。而搜索引擎能解决的查问复杂度是确定的、有下限的,所有的搜寻查问通过确定的若干个阶段就能够得出后果,然而计算引擎则不然。Elasticsearch尽管也有SQL反对的插件,然而这种插件的实现逻辑就是把简略的SQL查问翻译到确定的搜寻模式下面。对于搜索引擎原来就不反对的数据分析行为,Elasticsearch-SQL也杯水车薪。另外Elasticsearch-SQL以后的翻译能力看起来并不是十分齐备和智能,为了取得最高的搜寻性能用户还是须要尝试Elasticsearch原生的查问API。对于习惯应用SQL的用户而言,Elasticsearch的查问API是齐全生疏的一套体系,简单查问十分难写。 Elasticsearch的搜索引擎反对三种不同模式的搜寻形式:query_and_fetch,query_then_fetch,dfs_query_then_fetch。第一种模式很简略,每个分布式节点独立搜寻而后把失去的后果返回给客户端,第二种模式是每个分布式存储节点先搜寻到各自TopN的记录Id和对应的score,汇聚到查问申请节点后做重排失去最终的TopN后果,最初再申请存储节点去拉取明细数据。这里设计成两轮申请的目标就是尽量减少拉取明细的数量,也就是磁盘扫描的次数。最初一种形式是为了平衡各个存储节点打分的规范,先统计全局的TF(Term Frequency)和DF(Document Frequency),再进行query_then_fetch。Elasticsearch的搜索引擎齐全不具备数据库计算引擎的流式解决能力,它是齐全回合制的request-response数据处理。当用户须要返回的数据量很大时,就很容易呈现查问失败,或者触发GC。一般来说Elasticsearch的搜索引擎能力下限就是两阶段的查问,像多表关联这种查问是齐全超出其能力下限的。 ClickHouse的计算引擎特点则是极致的向量化,齐全用c++模板手写的向量化函数和aggregator算子使得它在聚合查问上的解决性能达到了极致。配合上存储极致的并行扫描能力,轻松就能够把机器资源跑满。ClickHouse的计算引擎能力在剖析查问反对上能够齐全覆盖住Elasticsearch的搜索引擎,有齐备SQL能力的计算引擎能够让用户在解决数据分析时更加灵便、自在。 数据扫描 ClickHouse是齐全列式的存储计算引擎,而且是以有序存储为外围,在查问扫描数据的过程中,首先会依据存储的有序性、列存块统计信息、分区键等信息推断出须要扫描的列存块,而后进行并行的数据扫描,像表达式计算、聚合算子都是在正规的计算引擎中解决。从计算引擎到数据扫描,数据流转都是以列存块为单位,高度向量化的。而Elasticsearch的数据扫描如上一节所述,次要产生在query和fetch阶段。其中query阶段次要是扫描Lucene的索引文件获取查问命中的DocId,也包含扫描列存文件进行聚合计算。而fetch阶段次要是点查Lucene索引中的行存文件读取明细后果。表达式计算和聚合计算在两个阶段都有可能产生,其计算逻辑都是以行为单位进行运算。总的来说Elasticsearch的数据扫描和计算都没有向量化的能力,而且是以二级索引后果为根底,当二级索引返回的命中行数特地大时(波及大量数据的剖析查问),其搜索引擎就会暴露出数据处理能力有余的短板。 再谈高并发 很多用户谈到ClickHouse,都会有一个谬误的映像,ClickHouse查问跑得快,然而并发不行。但这背地的起因其实是ClickHouse的并行太牛逼了,这是ClickHouse的一大强项,一个查问就能够把磁盘吞吐都打满,查问并行齐全不依赖于shard,能够任意调整。不可否认解决并发申请的吞吐能力是掂量一个数据系统效率的最终指标,ClickHouse的架构上并没有什么人造的并发缺点,只不过它是个正直boy,查问须要扫描的数据量和计算复杂度摆在那,ClickHouse只是每次都老老实实计算而已,机器的硬件能力就决定了它的并发下限。ClickHouse的并发能力事实上是不错的,认为它并发不行是个误区。只是默认状况下ClickHouse的指标是保障单个query的latency足够低;局部场景下用户能够通过设置适合的零碎参数来晋升并发能力,比方max_threads等。反过来,在这里介绍一下为什么有些场景下Elasticsearch的并发能力会很好。首先从Cache设计层面来看,Elasticsearch的Cache包含Query Cache, Request Cache,Data Cache,Index Cache,从查问后果到索引扫描后果层层的Cache减速,就是因为Elasticsearch认为它的场景下存在热点数据,可能被重复查问。反观ClickHouse,只有一个面向IO的UnCompressedBlockCache和零碎的PageCache,为什么呢?因为ClickHouse立足于剖析查问场景,剖析场景下的数据和查问都是多变的,查问后果等Cache都不容易命中,所以ClickHouse的做法是始终围绕磁盘数据,具备良好的IO Cache能力。其次回到数据扫描粒度,Elasticsearch具备全列的二级索引能力,这些索引个别都是预热好提前加载到内存中的,即便在多变的查问条件下索引查问失去后果的代价也很低,拿到索引后果就能够按行读取数据进行计算。而原生ClickHouse并没有二级索引的能力,在多变的查问条件下只能大批量地去扫描数据过滤出后果(阿里云ClickHouse曾经具备二级索引能力,解决了这一问题,性能程度和Elasticsearch相当,后续性能测评局部会进行具体介绍)。然而Elasticsearch具备二级索引,并发能力就肯定会好么?也不尽然,当二级索引搜寻失去的后果集很大时,查问还是会随同大量的IO扫描,高并发就无从谈起,除非Elasticsearch的Data Cache足够大,把所有原数据都加载到内存里来。 总结来说,Elasticsearch只有在齐全搜寻场景上面(where过滤后的记录数较少),并且内存足够的运行环境下,能力展现出并发上的劣势。而在剖析场景下(where过滤后的记录数较多),ClickHouse凭借极致的列存和向量化计算会有更加杰出的并发体现。两者的偏重不同而已,同时ClickHouse并发解决能力立足于磁盘吞吐,而Elasticsearch的并发解决能力立足于内存Cache。ClickHouse更加适宜低成本、大数据量的剖析场景,它可能充分利用磁盘的带宽能力。 性能测试 在本章中,作者选取了用户业务中多个具备代表性的数据场景,以此对Elasticsearch和ClickHouse做了一个全方面多角度的性能测试报告。具体的测试集群环境如下: 日志剖析场景 作者在日志剖析场景中选取了两个具备代表性的查问场景进行比照测试,后果如下所示。从后果剖析来看ClickHouse和Elasicsearch在两个场景中的性能差距随着where条件过滤后的记录数增大而扩充,在数据量更大的trace_log场景中,两者的剖析查问性能差距高深莫测。Elasticsearch和ClickHouse完整版建表语句和查问下载:日志剖析场景access_log(数据量197921836)ClickHouse中的建表语句如下: ClickHouse中的查问语句如下: --Q1select _date, accept_time, access_ip, type, total_time, concat(toString(total_time),'ms') as total_time_ms, sql,schema,succeed,process_id,inst_name from access_log where _date >= '2020-12-27 00:38:31' and _date <= '2020-12-28 00:38:31' and logic_ins_id = 502680264 and accept_time <= 1609087111000 and accept_time >= 1609000711000 and positionCaseInsensitive(sql, 'select') > 0 order by accept_time desc limit 50,50;--Q2select case when total_time <=100 then 1 when total_time > 100 and total_time <= 500 then 2 when total_time > 500 and total_time <= 1000 then 3 when total_time > 1000 and total_time <= 3000 then 4 when total_time > 3000 and total_time <= 10000 then 5 when total_time > 10000 and total_time <= 30000 then 6 else 7 end as reorder, case when total_time <=100 then '0~100ms' when total_time > 100 and total_time <= 500 then '100ms~500ms' when total_time > 500 and total_time <= 1000 then '500ms~1s' when total_time > 1000 and total_time <= 3000 then '1s~3s' when total_time > 3000 and total_time <= 10000 then '3s~10s' when total_time > 10000 and total_time <= 30000 then '10s~30s' else '30s以上' end as label, case when total_time <= 100 then '0~100' when total_time > 100 and total_time <= 500 then '100~500' when total_time > 500 and total_time <= 1000 then '500~1000' when total_time > 1000 and total_time <= 3000 then '1000~3000' when total_time > 3000 and total_time <= 10000 then '3000~10000' when total_time > 10000 and total_time <= 30000 then '10000~30000' else '30000~10000000000' end as vlabel, count() as valuefrom access_logwhere logic_ins_id = 502867976 and _date >= '2020-12-27 00:38:31' and _date <= '2020-12-28 00:38:31' and accept_time <= 1609087111000 and accept_time >= 1609000711000 group by label,vlabel,reorder order by reorder;--Q3select toStartOfMinute(_date) as time, count() as value from access_log where logic_ins_id = 500152868 and accept_time <= 1609087111000 and accept_time >= 1609000711000 group by time order by time;--Q4select count(*) as c from ( select _date, accept_time, access_ip, type, total_time, concat(toString(total_time),'ms') as total_time_ms, sql, schema, succeed, process_id, inst_name from access_log where logic_ins_id = 501422856 and _date >= '2020-12-27 00:38:31' and _date <= '2020-12-28 00:38:31' and accept_time <= 1609087111000 and accept_time >= 1609000711000);性能比照如下: ...

April 28, 2021 · 4 min · jiezi

关于elasticsearch:elasticsearch之重建索引

[TOC] elasticsearch应用工夫长了后,总是有各种起因重建索引,然而ES是不反对索引字段类型变更的,起因是一个字段的类型进行批改之后,ES会从新建设对这个字段的索引信息,影响到ES对该字段分词形式,相关度,TF/IDF倒排创立等。网上有很多不进行服务的状况下使得ES索引字段类型变更的文章,本文基于elasticsearch 7.12的版本记录下重建索引的步骤 索引重建的步骤创立oldindex给索引创立别名向oldindex中插入9条数据创立新的索引newindex重建索引实现不重启服务索引的切换创立oldindexcurl -H "Content-type: application/json" -XPUT "http://localhost:9200/oldindex" -d'{ "mappings": { "properties": { "name" : { "type": "text" }, "price" : { "type": "double" } } }}'给索引创立别名curl -H "Content-type: application/json" -XPUT "http://localhost:9200/oldindex/_alias/alias_oldindex"向oldindex中插入9条数据curl -H "Content-type: application/json" -XPOST "http://localhost:9200/alias_oldindex/_doc/_bulk" -d'{"create":{"_id":1}}{"name":"name 01","price":1}{"create":{"_id":2}}{"name":"name 02","price":2}{"create":{"_id":3}}{"name":"name 03","price":3}{"create":{"_id":4}}{"name":"name 04","price":4}{"create":{"_id":5}}{"name":"name 05","price":5}{"create":{"_id":6}}{"name":"name 06","price":6}{"create":{"_id":7}}{"name":"name 07","price":7}{"create":{"_id":8}}{"name":"name 08","price":8}{"create":{"_id":9}}{"name":"name 09","price":9}'创立新的索引newindexcurl -H "Content-type: application/json" -XPUT "http://localhost:9200/newindex" -d'{ "mappings": { "properties": { "name" : { "type": "text" }, "price" : { "type": "double" } } }}'重建索引数据量大的话能够异步执⾏,如果 reindex 工夫过⻓,倡议加上 wait_for_completion=false 的参数条件,这样 reindex 将间接返回 taskId ...

April 21, 2021 · 1 min · jiezi

关于elasticsearch:elasticsearch7x整合springBoot

1、导入依赖 <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.6.2</version></dependency><dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.6.2</version></dependency>2、配置application.xml elasticsearch: ip: 你的ip:92003、创立配置类 /** * 形容: 连贯客户端 * * @author wenye * @create 2021-03-25 13:22 */@Configurationpublic class ElasticSearchClientConfig{ /** * 超时工夫设为5分钟 */ private static final int TIME_OUT = 5 * 60 * 1000; private static final int ADDRESS_LENGTH = 2; private static final String HTTP_SCHEME = "http"; @Value("${elasticsearch.ip}") String[] ipAddress; @Bean public RestClientBuilder restClientBuilder() { HttpHost[] hosts = Arrays.stream(ipAddress) .map(this::makeHttpHost) .filter(Objects::nonNull) .toArray(HttpHost[]::new); return RestClient.builder(hosts); } @Bean(name = "highLevelClient") public RestHighLevelClient highLevelClient(@Autowired RestClientBuilder restClientBuilder) { restClientBuilder.setRequestConfigCallback( new RestClientBuilder.RequestConfigCallback() { @Override public RequestConfig.Builder customizeRequestConfig( RequestConfig.Builder requestConfigBuilder) { return requestConfigBuilder.setSocketTimeout(TIME_OUT); } }); //TODO 此处能够进行其它操作 return new RestHighLevelClient(restClientBuilder); } private HttpHost makeHttpHost(String s) { assert StringUtils.isNotEmpty(s); String[] address = s.split(":"); if (address.length == ADDRESS_LENGTH) { String ip = address[0]; int port = Integer.parseInt(address[1]); System.err.println(ip+"+"+port); return new HttpHost(ip, port, HTTP_SCHEME); } else { return null; } }}4、实现es中的一些操作、如索引的创立、文档的crud、批量操作、各种查问 ...

April 20, 2021 · 4 min · jiezi

关于elasticsearch:Elasticsearch-VS-ClickHouse

ES VS CK,老本太高,效率太低?不存在的大数据东风下,Clickhouse这坨屎是怎么入地的DB-Engines Ranking 数据库排名本文出自 qbit snap

April 19, 2021 · 1 min · jiezi