发布信息

如何用elasticsearch5.2成功全文索引 (如何用elabRadio制作收音机并接受国家调幅广播频段)

     2024-10-22 21:28:07     113

本文目录导航:

如何用elasticsearch5.2成功全文索引

一、ElasticSearch是什么?ElasticSearch是一个基于Lucene的搜查主机。

它提供了一个散布式多用户才干的全文搜查引擎,基于RESTful web接口。

Elasticsearch是用Java开发的,并作为Apache容许条款下的开明源码颁布,是第二盛行的企业搜查引擎。

能够到达实时搜查,稳固,牢靠,极速,装置经常使用繁难,零性能和齐全收费。

咱们先说说ES的基本概念。

1、索引(Index)ES将数据存储于一个或多个索引中,索引是具备相似特性的文档的汇合。

类比传统的相关型数据库畛域来说,索引相当于SQL中的一个数据库,或许一个数据存储计划(schema)。 如何用elabRadio制作收音机并接受国家调幅广播频段

索引由其称号(必定为全小写字符)启动标识,并经过援用此称号成功文档的创立、搜查、降级及删除操作。

一个ES集群中可以按需创立恣意数目标索引。

2、类型(Type)类型是索引外部的逻辑分区(category/partition),但是其意义齐全取决于用户需求。

因此,一个索引外部可定义一个或多个类型(type)。

普通来说,类型就是为那些领有相反的域的文档做的预约义。

例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。

类比传统的相关型数据库畛域来说,类型相当于“表”。

3、文档(document)文档是Lucene索引和搜查的原子单位,它是蕴含了一个或多个域的容器,基于JSON格局启动示意。

文档由一个或多个域组成,每个域领有一个名字及一个或多个值,有多个值的域理论称为“多值域”。

每个文档可以存储不同的域集,但同一类型下的文档至应该有某种水平上的相似之处。

4、映射(Mapping)ES中,一切的文档在存储之前都要首先启动剖析。

用户可依据须要定义如何将文本宰割成token、哪些token应该被过滤掉,以及哪些文本须要启动额外处置等。

另外,ES还提供了额外性能,例如将域中的内容按需排序。

理想上,ES也能智能依据其值确定域的类型。

5、集群(Cluster)ES集群是一个或多个节点的汇合,它们独特存储了整个数据集,并提供了联结索引以及可跨一切节点的搜查才干。

多节点组成的集群领有冗余才干,它可以在一个或几个节点产生缺点时保障服务的全体可用性。

集群靠其独有的称号启动标识,自动称号为“elasticsearch”。

节点靠其集群称号来选择参与哪个ES集群,一个节点只能属一个集群。

假设不思考冗余才干等特性,仅有一个节点的ES集群一样可以成功一切的存储及搜查性能。

6、节点(Node)运转了单个实例的ES主机称为节点,它是集群的一个成员,可以存储数据、介入集群索引及搜查操作。

相似于集群,节点靠其称号启动标识,默以为启动时智能生成的随机Marvel字符称号。

用户可以按须要自定义任何宿愿经常使用的称号,但出于治理的目标,此称号应该尽或许有较好的识别性。

节点经过为其性能的ES集群称号确定其所要参与的集群。

7、分片(Shard)和正本(Replica)ES的“分片(shard)”机制可将一个索引外部的数据散布地存储于多个节点,它经过将一个索引切分为多个底层物理的Lucene索引成功索引数据的宰割存储性能,这每一个物理的Lucene索引称为一个分片(shard)。

每个分片其外部都是一个全性能且独立的索引,因此可由集群中的任何主机存储。

创立索引时,用户可指定其分片的数量,自动数量为5个。

ES集群可由多个节点组成,各Shard散布式地存储于这些节点上。

ES可智能在节点间按须要移动shard,例如参与节点或节点缺点时。

简而言之,分片成功了集群的散布式存储,而正本成功了其散布式处置及冗余性能。

OK,上方把ES相关的基本概念及原理大抵说明了下,那么ES究竟是怎样成功全文检索的呢?Elasticsearch成功全文检索,首先要确定分词器,ES自动有很多分词器,可参考官方文档。

了解分词器关键是怎样成功的。

普通中文分词器经常使用第三方的ik分词器、mmsegf分词器和paoding分词器,最后或许构建于lucene,起初移植于ES。

目前咱们在最新版的ES中,经常使用的是IK分词。

装置ik分词器到elasticsearch很繁难,它有个插件目录analysis-ik,和一特性能目录ik, 区分拷贝到plugins和conf目录就可以了。

当你有少量的文本数据时,ES均会将其启动分词并将这些词语保留在索引中,当输入关键词启动查问时,索引就会起到作用,查找对应的相反的查问词,从而成功全文检索。

当然这个环节是很吃内存的哦。

elasticsearch 在大数据中能成功哪些性能

由于须要优化名目标搜查品质,最近钻研了一下Elasticsearch,一款十分低劣的散布式搜查程序。

最开局的一些笔记放到github,这里只是演绎总结一下。

首先,为什么要经常使用Elasticsearch?最开局的时刻,咱们的名目仅仅经常使用MySQL启动繁难的搜查,而后一个不能索引的like语句,间接拉低MySQL的性能。

起初,咱们曾思考过sphinx,并且sphinx也在之前的名目中成功实施过,但想想如今的数据量级,多台MySQL,以及搜查服务自身HA,还有后续扩容的疑问,咱们觉得sphinx并不是一个最优的选用。

于是人造将眼光放到了Elasticsearch上方。

依据官方自己的引见,Elasticsearch是一个散布式搜查服务,提供Restful API,底层基于Lucene,驳回多shard的形式保障数据安保,并且提供智能resharding的性能,加之github等大型的站点也驳回 Elasticsearch作为其搜查服务,咱们选择在名目中经常使用Elasticsearch。

关于Elasticsearch,假设要在名目中经常使用,须要处置如下疑问:索引,关于须要搜查的数据,如何建设适合的索引,还须要依据特定的言语经常使用不同的analyzer等。

搜查,Elasticsearch提供了十分弱小的搜查性能,如何写出高效的搜查语句?数据源,咱们一切的数据是寄存到MySQL的,MySQL是惟一数据源,如何将MySQL的数据导入到Elasticsearch?关于1和2,由于咱们的数据都是从MySQL生成,index的field是固定的,关键做的上班就是依据业务场景设计好对应的mapping以及search语句就可以了,当然实践无法能这么繁难,须要咱们始终的调优。

而关于3,则是须要一个工具将MySQL的数据导入Elasticsearch,由于咱们对搜查实时性要求很高,所以须要将MySQL的增量数据实时导入,笔者惟一能想到的就是经过row based binlog来成功。

而近段期间的上班,也就是成功一个MySQL增量同步到Elasticsearch的服务。

LuceneElasticsearch底层是基于Lucene的,Lucene是一款低劣的搜查lib,当然,笔者以前依然没有接触经常使用过。

:-)Lucene关键概念:document:用来索引和搜查的关键数据源,蕴含一个或许多个Field,而这些Field则蕴含咱们跟Lucene交互的数据。

Field:document的一个组成局部,有两个局部组成,name和value。

Term:无法宰割的单词,搜查最小单元。

Token:一个Term出现形式,蕴含这个Term的内容,在文档中的起始位置,以及类型。

Lucene经常使用Inverted index来存储term在document中位置的映射相关。

譬如如下文档:Elasticsearch Server 1.0 (document 1)Mastring Elasticsearch (document 2)Apache Solr 4 Cookbook (document 3)经常使用inverted index存储,一个繁难地映射相关:TermCountDocuemnt1.01<1>41<3>Apache1<3>Cookbook1<3>Elasticsearch2<1>.<2>Mastering1<2>Server1<1>Solr1<3>关于上方例子,咱们首先经过火词算法将一个文档切分红一个一个的token,再失掉该token与document的映射相关,并记载token产生的总次数。

这样就失掉了一个繁难的inverted index。

Elasticsearch关键概念要经常使用Elasticsearch,笔者以为,只有要了解几个基本概念就可以了。

在数据层面,关键有:Index:Elasticsearch用来存储数据的逻辑区域,它相似于相关型数据库中的db概念。

一个index可以在一个或许多个shard上方,同时一个shard也或许会有多个replicas。

document:Elasticsearch外面存储的实体数据,相似于相关数据中一个table外面的一行数据。

document由多个field组成,不同的document外面同名的field必定具备相反的类型。

document外面field可以重复产生,也就是一个field会有多个值,即multivalued。

document type:为了查问须要,一个index或许会有多种document,也就是document type,但须要留意,不同document外面同名的field必定要是相反类型的。

Mapping:存储field的相关映射消息,不同document type会有不同的mapping。

关于相熟MySQL的童鞋,咱们只有要大略以为Index就是一个db,document就是一行数据,field就是table的column,mapping就是table的定义,而document type就是一个table就可以了。

document type这个概念其实最开局也把笔者给弄懵懂了,其实它就是为了更好的查问,举个繁难的例子,一个index,或许一局部数据咱们想经常使用一种查问形式,而另一局部数据咱们想经常使用另一种查问形式,于是就有了两种type了。

不过这种状况应该在咱们的名目中不会产生,所以理论一个index上方仅会有一个 type。

在服务层面,关键有:Node: 一个server实例。

Cluster:多个node组成cluster。

Shard:数据分片,一个index或许会存在于多个shards,不同shards或许在不同nodes。

Replica:shard的备份,有一个primary shard,其他的叫做replica shards。

Elasticsearch之所以能灵活resharding,关键在于它最开局就预先调配了多个shards(貌似是1024),而后以shard为单位启动数据迁徙。

这个做法其真实散布式畛域十分的普遍,codis就是经常使用了1024个slot来启动数据迁徙。

由于恣意一个index都可性能多个replica,经过冗余备份的形式保障了数据的安保性,同时replica也能分担读压力,相似于MySQL中的slave。

Restful APIElasticsearch提供了Restful API,经常使用json格局,这使得它十分利于与外部交互,只管Elasticsearch的客户端很多,但笔者依然很容易的就写出了一个繁难客户端用于名目中,再次印证了Elasticsearch的经常使用真心很容易。

Restful的接口很繁难,一个url示意一个特定的资源,譬如/blog/article/1,就示意一个index为blog,type为aritcle,id为1的document。

而咱们经常使用http规范method来操作这些资源,POST新增,PUT降级,GET失掉,DELETE删除,HEAD判别能否存在。

这里,友谊介绍httpie,一个十分弱小的http工具,团体觉得比curl还用,简直是命令行调试Elasticsearch的绝配。

一些经常使用httpie的例子:# createhttp POST :9200/blog/article/1 tags:=[elasticsearch]# gethttp GET :9200/blog/article/1# updatehttp PUT :9200/blog/article/1 tags:=[elasticsearch, hello]# deletehttp DELETE :9200/blog/article/1# existshttp HEAD :9200/blog/article/1索引和搜查只管Elasticsearch能智能判别field类型并建设适合的索引,但笔者依然介绍自己设置相关索引规定,这样才干更好为后续的搜查服务。

咱们经过定制mapping的形式来设置不同field的索引规定。

而关于搜查,Elasticsearch提供了太多的搜查选项,就不逐一律述了。

索引和搜查是Elasticsearch十分关键的两个方面,间接相关到产品的搜查体验,但笔者现阶段也仅仅是大略了解了一点,后续在详细引见。

同步MySQL数据Elasticsearch是很弱小,但要建设在有足量数据状况上方。

咱们的数据都在MySQL上方,所以如何将MySQL的数据导入Elasticsearch就是笔者最近钻研的物品了。

只管如今有一些成功,譬如elasticsearch-river-jdbc,或许elasticsearch-river-mysql,但笔者并不计划经常使用。

elasticsearch-river-jdbc的性能是很弱小,但并没有很好的支持增量数据降级的疑问,它须要对应的表只增不减,而这个简直在名目中是无法能办到的。

elasticsearch-river-mysql倒是做的很不错,驳回了python-mysql-replication来经过binlog失掉变卦的数据,启动增量降级,但它貌似处置MySQL dump数据导入的疑问,不过这个笔者真的好好确认一下?话说,python-mysql-replication笔者还提交过pull处置了minimal row image的疑问,所以对elasticsearch-river-mysql这个名目很有好感。

只是笔者选择自己写一个进去。

为什么笔者选择自己写一个,不是由于笔者青睐造轮子,关键要素在于关于这种MySQL syncer服务(增量失掉MySQL数据降级到相相关统),咱们不光可以用到Elasticsearch上方,而且还能用到其他服务,譬如cache上方。

所以笔者其实想成功的是一个通用MySQL syncer组件,只是如今关键关注Elasticsearch罢了。

名目代码在这里go-mysql-elasticsearch,现已成功第一阶段开发,外部对接测试中。

go-mysql-elasticsearch的原理很繁难,首先经常使用mysqldump失掉以后MySQL的数据,而后在经过此时binlog的name和position失掉增量数据。

一些限度:binlog必定要变成row-based format格局,其实咱们并不须要担忧这种格局的binlog占用太多的硬盘空间,MySQL 5.6之后GTID形式都介绍经常使用row-based format了,而且理论咱们都会把控SQL语句品质,不准许一次性性更改正多行数据的。

须要同步的table最好是innodb引擎,这样mysqldump的时刻才不会阻碍写操作。

须要同步的table必定要有主键,好吧,假设一个table没有主键,笔者真心会疑心设计这个table的同窗编程水平了。

多列主键也是不介绍的,笔者现阶段不计划支持。

必定别灵活更改须要同步的table结构,Elasticsearch只能支持灵活参与field,并不支持灵活删除和更改field。

理论来说,假设触及到alter table,很多时刻曾经证实前期设计的不正当以及关于未来裁减的预估无余了。

更详细的说明,等到笔者成功了go-mysql-elasticsearch的开发,并经过消费环境中测试了,再启动补充。

总结最近一周,笔者花了不少期间在Elasticsearch上方,如今算是基本入门了。

其实笔者觉得,关于一门疑问的技术,找一份靠谱的资料(官方文档或许入门书籍),蛋疼的对着资料敲一遍代码,疑问的再问google,最后在将其用到实践名目,这门技术就算是初步把握了,当然知晓还得在下点功夫。

如今笔者只是觉得Elasticsearch很美妙,上线之后铁定会有坑的,那时刻只能缓缓填了。

话说,笔者是不是要学习下java了,省的到时刻看疑问代码就惨了。

:-)

es代表什么

es代表的含意有多种或许。

一、明白答案

在计算机迷信和互联网技术畛域,es经常被用作Elasticsearch的缩写,它是一款开源的搜查引擎软件,关键用于数据的存储、搜查以及剖析。

除此之外,es在其他畛域中也或许有其他的含意,如工程符号、电子工程缩写等。

因此,es的详细含意须要依据其运行的畛域来判别。

二、详细解释

1. Elasticsearch:这是es最经常出现的含意。

Elasticsearch是一个基于Lucene的开源搜查主机,它能极速地启动全文本搜查和剖析,以及结构化数据的处置。

它被宽泛运行于网站搜查、日志剖析、监控数据等畛域。

在开发中,经常会用其缩写“es”来示意。

2. 其他畛域的运行:es在工程符号和电子工程畛域也或许有特定的含意,例如在电路图中示意某种特定的元件或概念。

此外,es也或许在其他语境下代表特定的缩写,详细含意须要依据其所在畛域和语境来判别。

3. 不确定性的要素:由于es并不是一个固定的缩写词汇,其含意或许会随着运行畛域和语境的变动而变动。

因此,无了解和经常使用时须要依据详细状况启动判别。

假设须要明白其详细含意,倡导结合高低文或征询相关畛域的专业人士。

请留意,es的含意是灵敏的且多样的,它确实切含意须要结合详细的运行畛域和语境启动解释和了解。

在实践运行中应留意区别其所在畛域及其含意,防止因曲解形成不用要的费事。

相关内容 查看全部