学习elasticsearch必须先学习lucene吗

查看: 1505|回复: 6
elasticsearch入门级学习总结
主题帖子积分
中级会员, 积分 924, 距离下一级还需 76 积分
中级会员, 积分 924, 距离下一级还需 76 积分
本帖最后由 zhuqitian 于
10:44 编辑
近期公司想要通过es出报表,总监就让我学习下es,这几天环境折腾好了,其实如果只是想搭好几台十几台的集群,最多也就半天吧,快则两小时版本5.3.0,目前保留下来的插件:kibana,head(也是最有用的两个插件了)
kibana:通过restful api查询特别方便,快捷:
//PUT /indexName/typeName/id& && & 若是索引不存在会自动创建 若是不想关闭自动创建:elasticsearch.yml --& action.auto_create_index: false
PUT twitter/tweet/1
& & &user& : &kimchy&,
& & &post_date& : &T14:12:12&,
& & &message& : &trying out Elasticsearch&
GET /_cat/indices?v& &//详细查看全部索引& &?v表示显示详细信息,其实就是把表头也展现出来
GET _cat/health?v& &&&//查看集群健康状态:green健康(所有的primary shard和replica shard都是active状态),yellow良好(所有primary shard都是active状态,但是部分replica shard挂掉了),red不健康(有primary shard挂掉的情况)
GET _cat/nodes?v& &&&//查看集群节点信息,标注为master(mi)为主节点,不作为数据节点
个人理解:shard就好像是hdfs中的block,数据库可以有副本,那es中是primary shard就有replica shard,主数据块和副本的分布策略跟hdfs中类似
es官方和github上也提供了很多比较不错的插件,但是都美中不足,比如x-pack据说是要收费的,可能是有些公司测出了es存在网络安全隐患,就开发除了一个xpack去弥补,进行ssl认证等,因为收费,所以可能有些企业不会去使用这个插件。还有个elasticsearch-sql插件,这个可以在github上找到安装方法,但是5.x版本的es貌似对这个sql插件支持的不是很好,每次我在url中手工指定一条sql作为参数传进去时查询成功,数据也能迅速展现,但是界面就是显示不出来,可能后期会修复,只是每个引擎或者框架都会有自己的dsl,es的restful api是原生的,所以建议多用
稍微复杂些的查询:有查询过滤条件,有聚合,有排序,算是重用restful api中比较全面的了
GET /orders/info/_search
&&&size&: 0,
&&&query&: {
& & &bool&: {
& && &&must&: [
& && &&&{&match&: {
& && && & &ordercodeofsys&: &BADTCW0000000&
& && &&&}}
& && &&should&: [
& && &&&{&match&: {
& && && & &paymentfee&: 0
& && &&&},
& && && & &bool&: {
& && && && &&must&: [
& && && && &&&{&match&: {
& && && && && & &orderidofsys&: &1941610&
& && && && &&&}
& && && && &&&}
& && && && &],
& && && && &&must_not&: [
& && && && &&&{&match&: {
& && && && && & &updatetime&: &T00:26:57+08:00&
& && && && &&&}}
& && && && &]
& && && & }
& && &&filter&: {
& && &&&&prefix&: {
& && && & &discountfee&: 0
&&&aggs&: {
& & &group by ordercodeofsys&: {
& && &&terms&: {
& && &&&&field&: &ordercodeofsys&,
& && &&&&order&: {
& && && & &avg paymentfee&: &desc&
& && &&aggs&: {
& && &&&&avg paymentfee&: {
& && && & &avg&: {
& && && && &&field&: &paymentfee&
& && && & }
至于安装注意事项,如何配置属性参数暂不详述,毕竟我也刚研究几天也说不全(不过参数不像hadoop,hive这么多),下面介绍下java client连接es:
[Java] 纯文本查看 复制代码package org.elasticsearch.client.
import org.elasticsearch.action.search.SearchR
import org.elasticsearch.client.transport.TransportC
import mon.settings.S
import mon.transport.InetSocketTransportA
import org.elasticsearch.search.aggregations.A
import org.elasticsearch.search.aggregations.AggregationB
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramI
import org.elasticsearch.search.aggregations.bucket.histogram.H
import org.elasticsearch.search.aggregations.bucket.terms.StringT
import org.elasticsearch.search.aggregations.metrics.avg.A
import org.elasticsearch.transport.client.PreBuiltTransportC
import org.elasticsearch.search.aggregations.bucket.terms.Terms.B
import java.net.InetA
import java.net.UnknownHostE
import java.util.I
import java.util.M
* Created by 圣斗士宙斯 on .
public class ES_AGGS {
public static void main(String[] args) throws UnknownHostException{
//构建client
Settings settings = Settings.builder()
.put(&cluster.name&,&bcw-dmp-es&)
.put(&xpack.security.transport.ssl.enabled&, false)
.put(&xpack.security.user&,&elastic:changeme&)
.put(&client.transport.sniff&, true)
.put(&client.transport.ping_timeout&,&5s&)
.put(&client.transport.nodes_sampler_interval&,&5s&)
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(&host&), 9300));
SearchResponse response = client.prepareSearch(&orders&)
.addAggregation(AggregationBuilders.terms(&group by postfee&).field(&postfee&)
.subAggregation(AggregationBuilders.dateHistogram(&group by updatetime&).field(&updatetime&)
.dateHistogramInterval(DateHistogramInterval.YEAR)
.subAggregation(AggregationBuilders.avg(&avg totalfee&).field(&totalfee&))))
.execute().actionGet();
Map&String,Aggregation& aggsMap = response.getAggregations().asMap();
StringTerms groupbyData = (StringTerms) aggsMap.get(&group by postfee&);
Iterator&Bucket& buckerIterator = groupbyData.getBuckets().iterator();
while (buckerIterator.hasNext()) {
Bucket bucket = buckerIterator.next();
System.out.print(bucket.getKey()+&:& +bucket.getDocCount());
Histogram histogram = (Histogram) bucket.getAggregations().asMap().get(&group by postfee&);
Iterator&org.elasticsearch.search.aggregations.bucket.histogram.Histogram.Bucket& bucket2 = histogram.getBuckets().iterator();
while (bucket2.hasNext()){
org.elasticsearch.search.aggregations.bucket.histogram.Histogram.Bucket bucket3 = bucket2.next();
System.out.print(bucket3.getKey()+&:&+bucket3.getDocCount());
Avg avg = (Avg) bucket3.getAggregations().asMap().get(&avg totalfee&);
System.out.print(avg.getValue());
client.close();
构建client时跟spark等框架差不多,也可以手工写死一些参数,优先级最高
时间有限还要继续干活,我也差不多就这么货了,下次深究底层原理了再分享我的一些理解
show your&&knowledge with the world!
主题帖子积分
新手上路, 积分 40, 距离下一级还需 10 积分
新手上路, 积分 40, 距离下一级还需 10 积分
有点难&&多支持下 。加油啦
主题帖子积分
高级会员, 积分 3205, 距离下一级还需 1795 积分
高级会员, 积分 3205, 距离下一级还需 1795 积分
楼主安装集群够快的。
对于es除了ssh,应该还有安全方面的认证,比如http认证。
欢迎加入about云群 、 ,云计算爱好者群,关注
主题帖子积分
中级会员, 积分 924, 距离下一级还需 76 积分
中级会员, 积分 924, 距离下一级还需 76 积分
楼主安装集群够快的。
对于es除了ssh,应该还有安全方面的认证,比如http认证。
我们是用es出报表用的,所以肯定是内网,谢谢你的提醒,我看下这插件
主题帖子积分
中级会员, 积分 924, 距离下一级还需 76 积分
中级会员, 积分 924, 距离下一级还需 76 积分
有点难&&多支持下 。加油啦
开头难,开了头就顺畅多了
主题帖子积分
中级会员, 积分 708, 距离下一级还需 292 积分
中级会员, 积分 708, 距离下一级还需 292 积分
主题帖子积分
中级会员, 积分 924, 距离下一级还需 76 积分
中级会员, 积分 924, 距离下一级还需 76 积分
积极上进,爱好学习
经常帮助其他会员答疑
经常参与各类话题的讨论,发帖内容较有主见
站长推荐 /4
云计算hadoop视频大全(新增 yarn、flume|storm、hadoop一套视频
等待验证会员请验证邮箱
新手获取积分方法
技术类问答,解决学习openstack,hadoop生态系统中遇到的问题
Powered by查看: 10056|回复: 2
一步一步学lucene——(第一步:概念篇)
主题帖子积分
高级会员, 积分 2697, 距离下一级还需 2303 积分
高级会员, 积分 2697, 距离下一级还需 2303 积分
问题导读:
1、理解lucene中信息检索的概念是什么?
2、什么是lucene、以及lucene的作用?
3、如何理解lucene与应用程序的关系?
4、了解lucene的组件都有那些?
信息检索的概念
& && &信息检索(Information Retrieval)是指信息按一定的方式组织起来,并根据信息用户的需要找出有关的信息的过程和技术。狭义的信息检索就是信息检索过程的后半部分,即从 信息集合中找出所需要的信息的过程,也就是我们常说的信息查寻(Information Search 或Information Seek)。
& && &我们在下边研究的lucene就是对信息做全文检索的一种手段,或者说是一项比较流行的技术,跟google、baidu等专业的搜索引擎比起来会有一定的差距,但是对于普通的企业级应用已经是足够了。
什么是lucene
& && & Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的 查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中 实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
& && & 现在最新的稳定版本是3.6,而且4.0alpha版本也已经推出。
lucene能做什么
& && &首先要明确一点,lucene只是一个软件类库,或者一个工具箱,而并不是一个完整的搜索程序。但是它的API非常简单,可以让你不用了解复杂的索引和搜索实现的情况下,通过它提供的API,来完成非常复杂的事务处理。
& && &你可以把站内新闻都索引了,做个资料库;你可以把一个数据库表的若干个字段索引起来,那就不用再担心因为“%like%”而锁表了;你也可以写个自己的搜索引擎……
应用程序和lucene之间的关系
& && &lucene的工作过程是首先建立索引,将索引保存,然后对索引进行搜索,并且根据搜索的结果找到对应的数据的过程。
关系结构如下:
application and lucene
relation.png (89.4 KB, 下载次数: 5)
18:50 上传
& && && && && && && && && && && && && && && && && && && && && && && && && & 图:应用程序和lucene之间的关系
lucene中的几大组件
一、索引组件
& && &创建索引的过程就是首先“获取内容”,然后根据获取的内容“建立文档”,对文档进行“文档分析”,最后对文档建立“文档索引”的过程。
1、获取内容
获取内容的手段很多,可以从上图的输入渠道中看到,包括数据库、文件系统、网络等多种渠道。
在有些情况下,获取内容的工作很简单,比如索引指定目录下的文件、将数据库中的内容读出并进行索引等。
但是有些情况下,获取内容的工作会很复杂,如操作文件系统、内容管理、各种web站点的数据等。
内容获取完全可以通过下面提供的开源软件进行获取,当然这里只是列出了其中的一部分:
solr:Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
nutch:Nutch 致力于让每个人能很容易, 同时花费很少就可以配置世界一流的Web搜索引擎。
grub:Grub Next Generation 是一个分布式的网页爬虫系统,包含客户端和服务器可以用来维护网页的索引。
Heritrix:Heritrix是一个开源,可扩展的web爬虫项目。Heritrix设计成严格按照robots.txt文件的排除指示和META robots标签。
Aperture:Aperture这个Java框架能够从各种各样的资料系统(如:文件系统、Web站点、IMAP和Outlook邮箱)或存在这些系统中的文件(如:文档、图片)爬取和搜索其中的全文本内容与元数据。
jcrawl:jcrawl是一款小巧性能优良的的web爬虫,它可以从网页抓取各种类型的文件,基于用户定义的符号,比如email,qq。
2、建立文档
& &&&文档是lucene中建立的小数据块,也就是说,必须先将这些获得的内容转换成文档,文档中几个带值的域主要包括:标题、正文、摘要、作者和链接等。
lucene提供了API来建立域和文档,但不提供任何建立它们的程序逻辑。
有一些应用可以很好的完成这些工作,下面也列出其中一部分,仅供参考:
Tika:Tika是一个内容抽取的工具集合(a toolkit for text extracting)。它集成了POI, Pdfbox 并且为文本抽取工作提供了一个统一的界面。其次,Tika也提供了便利的扩展API,用来丰富其对第三方文件格式的支持。
DBSight:DBSight是一个J2EE的搜索平台,可扩展的即时全文搜索任何关系型数据库,对初学者和专家。它具有内置的数据库抓取以下用户定义的SQL ,增量索引,配置的结果排名,突出显示的搜索结果(如谷歌) ,计数和分类结果(如亚马逊) 。脚手架支持标签云, AJAX搜索建议,以及拼写检查。它可以轻松地实现与其他语言的使用XML /简称JSON / HTML格式。有一个用户界面的所有业务,因此没有Java的编码是必要的。删除或更新记录的数据库可以同步。内容以外的数据库还可以进行搜查。
Hibernate Search:Hibernate Search的作用是对数据库中的数据进行检索的。它是hibernate对著名的全文检索系统Lucene的一个集成方案,作用在于对数据表中某些内容庞大的字段(如声明为text的字段)建立全文索引,这样通过hibernate search就可以对这些字段进行全文检索后获得相应的POJO,从而加快了对内容庞大字段进行模糊搜索的速度(sql语句中like匹配)。
Compass:Compass是一个强大的,事务的,高性能的对象/搜索引擎映射(OSEM:object/search engine mapping)与一个Java持久层框架.
3、文档分析
& &&&就是分析如何建立索引,怎样规划,lucene中提供了大量内嵌的分析器能让你轻松控制这些操作。
4、文档索引
& &&&也就是建立索引的过程,并且通过一个异常简单的API来完成索引操作。
二、搜索组件
& && &搜索处理的过程就是用户根据“用户搜索界面”,“建立查询”,并且根据“搜索查询”,得到“展现结果”的过程。
1、用户搜索界面
& &&&我们最熟悉的当然就是baidu和google了。
百度搜索界面.png (6.24 KB, 下载次数: 4)
18:54 上传
图:baidu搜索界面& && && && && && && && && && && && && &&&
2、建立查询
& &&&根据提交过来的搜索请求,将查询的条件组合起来并且交给lucene的查询解析器中,并且对查询的内容进行分析处理的过程。
3、搜索查询
& &&&根据查询解析器组合的查询条件,查询检索索引并返回与查询语句匹配的文档的过程。
4、展现结果
& &&&一旦获得匹配的文档就将结果展现出来的过程,类似于我们日常用到的搜索后的列表。
baidu展现界面.png (64.49 KB, 下载次数: 3)
18:56 上传
图:baidu搜索展现界面
& && && && && && && && && && && &
三、其它组件
1、管理组件
& &&&如爬虫要爬取时的规则的规则、时间等需要在管理界面进行统一的设置,对于搜索日志的管理等。
2、分析组件
& &&&对于某些关键詷搜索的频率,次数及搜索的习惯等进行分析的部分。
3、搜索范围
& &&&即搜索的范围是本机的,还是在分布式环境下的,还是基于其它系统的,也就是一个范围的划分和界定。
欢迎加入about云群 、 ,云计算爱好者群,亦可关注||
主题帖子积分
中级会员, 积分 443, 距离下一级还需 557 积分
中级会员, 积分 443, 距离下一级还需 557 积分
赞,讲解的非常详细,非常感谢
主题帖子积分
中级会员, 积分 954, 距离下一级还需 46 积分
中级会员, 积分 954, 距离下一级还需 46 积分
积极上进,爱好学习
经常参与各类话题的讨论,发帖内容较有主见
站长推荐 /4
云计算hadoop视频大全(新增 yarn、flume|storm、hadoop一套视频
等待验证会员请验证邮箱
新手获取积分方法
技术类问答,解决学习openstack,hadoop生态系统中遇到的问题
Powered by> 博客详情
摘要: 目前公司用的是solr来做搜索服务,但是感觉solr配置繁琐,没有elasticsearch来的简单,更何况elasticsearch还能做更多牛逼的事情,比如搭建日志系统logstash+elasticsearch+kibana。
1.什么是elasticsearch?
&&&&elastic是一款开源,可扩展全文搜索和分析的一款构建在lucene之上的框架。它允许我们实时快速的存储,搜索,分析大容量数据。github的搜索好像就是用elasticsearch做的。
2.elasticsearch的一些基本概念
& cluster:
1.代表一个集群,集群中有多个节点(每个节点上都是相同的数据)
2.默认cluster名字是elasticsearch,要注意的是一个节点只能属于一个cluster,
而区分cluster就是用名字来区分,因此不通的cluster名字不能相同。
官网下载的elasticsearch-xx文件夹下的data目录下文件夹名字就是cluster的名字。
1.它是cluster的一部分,用来存储数据,并提供集群的索引和搜索功能。
2.node都会有一个名字,启动时默认是随机生成的名字,但是我们可以自己指定名称。
一个node节点可以配置加到cluster上,默认是加入到elasticsearch这个cluster上面。
3.一般在一个cluster上,我们自己可以配置多个node,如果要配置多个node,
那么可以再启用elasticsearch服务来启动一个进程,
要注意的是新启动的elasticsearch里面配置文件elasticsearch.ymal配置的cluster.name必须一样
在data/elasticsearch下可以发现有nodes文件夹,存在文件夹0,这个文件夹所说的节点.
索引是document的一个集合.
比如我们有一些客户的数据索引,另外还有一个产品的数据索引和订单的数据索引。
一个索引必须用小写来指定名字,名字对于索引,搜索,更新,删除操作是很重要的。
如果很难理解那么我们可以认为这个就是数据库。(如果创建过自己index,比如叫firsttime,
那么在elasticsearch-xx/data/elasticsearch/0/indices下可以发现有firsttime文件夹,
这个文件夹名字就是对应index名字,里面存放了索引数据)
对于type就是对index的更细的一个划分。我们可以基于index上定义更多的type。
既然我们能把index理解成数据库,那么type就是数据库中的表了。
& document:
我们可以把它理解成数据库表的一条条数据(row)。这个是被索引的最基本单元。
& shards:
1.分片,如果我们的索引数据很大,超出了硬件存放的单个文件限制(linux下就有限制),
那么会发生问题的,而且也会影响搜索请求的速度。因此elasticsearch就引入了这个shards技术了。
2.当我们创建一个索引,我们能简单的定义很多个分片,
每个分片都有自己搜索,更新,删除等和index一样全部功能的一小块。
分片shards的好处是可以让我们水平分割和扩展我们存放的内容索引,
同时还可以让我们分发和(在多个节点可能)并行跨碎片操作从而提高性能/吞吐量。
3.可以发现在elasticsearch-xx/data/elasticsearch/0/indices/firsttime下
有默认5个shared从0-4
& replicas:
&1.当某个节点某个分片损坏或丢失时可以从副本中恢复。
2.提高es的查询效率,es会自动对搜索请求进行负载均衡。replicas可以设置为0个或者多个。
一旦设置replicas,那么每个shards就会有一个主shards,而replica&shards就是对主shards的拷贝
shards和replicas数量在索引创建时生成。当索引index生成后,我们能够动态改变replicas的数量,
但是不能改变shards的数量。
&如果我们在cluster上面有两个节点nodes,比如分片0(有两个,每个节点各有一个分片0),
那么会随机在其中一个节点上设置一个为主分片,另外一个就是replica&分片了,
这样我们将会有5个主要的shards(在主node上面)和另外5个replica&shards(在另外一个node上)
总共有10个shards.&
假如有3个nodes,那么会从所有nodes上选出0的一个主分片,还有1-4的每个主分片
总共还是5个主分片,其他的10个就是replica&分片了.这样应该理解了吧.
人打赏支持
码字总数 29223
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥你正在使用的浏览器版本过低,将不能正常浏览和使用知乎。

我要回帖

 

随机推荐