Pandasticsearch: An Elasticsearch client exposing DataFrame API

https://github.com/onesuper/pandasticsearch
 
# Create a DataFrame object
from pandasticsearch import DataFrame
df = DataFrame.from_es('http://localhost:9200', index='people')

# Print the schema(mapping) of the index
df.print_schema()
# company
# |-- employee
# |-- name: {'index': 'not_analyzed', 'type': 'string'}
# |-- age: {'type': 'integer'}
# |-- gender: {'index': 'not_analyzed', 'type': 'string'}

# Inspect the columns
df.columns
#['name', 'age', 'gender']

# Get the column
df.name
# Column('name')

# Filter
df.filter(df.age < 13).collect()
# [Row(age=12,gender='female',name='Alice'), Row(age=11,gender='male',name='Bob')]

# Project
df.filter(df.age < 25).select('name', 'age').collect()
# [Row(age=12,name='Alice'), Row(age=11,name='Bob'), Row(age=13,name='Leo')]

# Print the rows into console
df.filter(df.age < 25).select('name').show(3)
# +------+
# | name |
# +------+
# | Alice|
# | Bob |
# | Leo |
# +------+

# Sort
df.sort(df.age.asc).select('name', 'age').collect()
#[Row(age=11,name='Bob'), Row(age=12,name='Alice'), Row(age=13,name='Leo')]

# Aggregate
df[df.gender == 'male'].agg(df.age.avg).collect()
# [Row(avg(age)=12)]

# Groupby
df.groupby('gender').collect()
# [Row(doc_count=1), Row(doc_count=2)]

# Groupby and then aggregate
df.groupby('gender').agg(df.age.max).collect()
# [Row(doc_count=1, max(age)=12), Row(doc_count=2, max(age)=13)]

# Convert to Pandas object for subsequent analysis
df[df.gender == 'male'].agg(df.age.avg).to_pandas()
# avg(age)
# 0 12
继续阅读 »
https://github.com/onesuper/pandasticsearch
 
# Create a DataFrame object
from pandasticsearch import DataFrame
df = DataFrame.from_es('http://localhost:9200', index='people')

# Print the schema(mapping) of the index
df.print_schema()
# company
# |-- employee
# |-- name: {'index': 'not_analyzed', 'type': 'string'}
# |-- age: {'type': 'integer'}
# |-- gender: {'index': 'not_analyzed', 'type': 'string'}

# Inspect the columns
df.columns
#['name', 'age', 'gender']

# Get the column
df.name
# Column('name')

# Filter
df.filter(df.age < 13).collect()
# [Row(age=12,gender='female',name='Alice'), Row(age=11,gender='male',name='Bob')]

# Project
df.filter(df.age < 25).select('name', 'age').collect()
# [Row(age=12,name='Alice'), Row(age=11,name='Bob'), Row(age=13,name='Leo')]

# Print the rows into console
df.filter(df.age < 25).select('name').show(3)
# +------+
# | name |
# +------+
# | Alice|
# | Bob |
# | Leo |
# +------+

# Sort
df.sort(df.age.asc).select('name', 'age').collect()
#[Row(age=11,name='Bob'), Row(age=12,name='Alice'), Row(age=13,name='Leo')]

# Aggregate
df[df.gender == 'male'].agg(df.age.avg).collect()
# [Row(avg(age)=12)]

# Groupby
df.groupby('gender').collect()
# [Row(doc_count=1), Row(doc_count=2)]

# Groupby and then aggregate
df.groupby('gender').agg(df.age.max).collect()
# [Row(doc_count=1, max(age)=12), Row(doc_count=2, max(age)=13)]

# Convert to Pandas object for subsequent analysis
df[df.gender == 'male'].agg(df.age.avg).to_pandas()
# avg(age)
# 0 12
收起阅读 »

Elastic Advent Calendar 活动启动咯!

时间一转又到了年末,去年的 Advent 在三斗的发起下,进行的很不错,今年的 Advent 活动继续办下去吧,借鉴日本(http://qiita.com/advent-calendar/2016/elastic)的做法,我们今年可以先报名占坑,预定一个日子和你打算写的文章的标题,尽量错开时间。

今年的Advent文章也会同步发布到社区公众号。

去年 Advent 活动回顾 http://elasticsearch.cn/topic/advent
 
由于本站没有日历的功能,大家留言评论报名预定就好了。
 
格式(仅12月):日期,标题
如:12月x日 , xxx 小技巧一则
 
已发布:
《大规模Elasticsearch集群管理心得》
《Kibana 系漫游指南》 
《创建一个你自己的 Beat》
《将sql转换为es的DSL》
《Elasticsearch 2.x mapping tips》
《无外网环境10分钟快速集成 elasticsearch-head》
《Elasticsearch 5 入坑指南》
《可定制的 elasticsearch 数据导入工具 ——mysql_2_elasticsearch》
《记一次es性能调优》
《PacketBeat奇妙的OOM小记》
《ES5.0.0 安装记录》
继续阅读 »
时间一转又到了年末,去年的 Advent 在三斗的发起下,进行的很不错,今年的 Advent 活动继续办下去吧,借鉴日本(http://qiita.com/advent-calendar/2016/elastic)的做法,我们今年可以先报名占坑,预定一个日子和你打算写的文章的标题,尽量错开时间。

今年的Advent文章也会同步发布到社区公众号。

去年 Advent 活动回顾 http://elasticsearch.cn/topic/advent
 
由于本站没有日历的功能,大家留言评论报名预定就好了。
 
格式(仅12月):日期,标题
如:12月x日 , xxx 小技巧一则
 
已发布:
《大规模Elasticsearch集群管理心得》
《Kibana 系漫游指南》 
《创建一个你自己的 Beat》
《将sql转换为es的DSL》
《Elasticsearch 2.x mapping tips》
《无外网环境10分钟快速集成 elasticsearch-head》
《Elasticsearch 5 入坑指南》
《可定制的 elasticsearch 数据导入工具 ——mysql_2_elasticsearch》
《记一次es性能调优》
《PacketBeat奇妙的OOM小记》
《ES5.0.0 安装记录》 收起阅读 »

Elastic Stack 5.0 正式发布

Snip20161027_6.png

作者:Shay Banon,原文:https://www.elastic.co/blog/el ... eased 

记得在 2016 年 2 月份,就在 Elastic{ON} 16 大会之后,我写了一篇标题为 [Heya, Elastic Stack and X-Pack] (https://www.elastic.co/blog/he ... -pack ) 的博客。经过了几乎整整一年的努力,中间发布了 5  个 Alpha,1 个 Beta 和一个 RC 版本,今天我们非常高兴的正式宣布发布 Elastic Stack 的 GA 正式版本。

并且,重要的是,于此同时,在我们的 [Elastic Cloud](https://www.elastic.co/cloud/as-a-service/signup ) 上面也同步进行了更新。所以如果你需要托管的 Elasticsearch 和 Kibana ,那么没有其它地方比这里更及时了。我们致力于让 Elastic Cloud 成为一个托管 Elasticsearch 的最佳场所。事实上,在正式版发布之前,我们也提供了 RC 版本方便你用于测试。

我们的团队今天正在庆祝这一时刻,我希望你能加入我们。

GA 版本今天已经可以下载了,如果要加入 Elastic 团队 11 月 3 号的线上活动,了解更多有关于本次发布和向工程师提问,请点击这里 [注册!](https://www.elastic.co/live/v5 )
 

在开始探索发布详情之前,我想借此机会来回顾一下有哪些背后的事情让我们走到今天。

## 我们的社区

最近的 Elastic{ON} Tour,在每场活动的开场我会讨论我们公司过去几年的简短历史。最近一次活动的高潮是当我宣布我们的累计下载总数达到了七千五百万。当我第一次开始这个项目的时候,我希望她能够被能够被广泛使用,但是我们的社区的热情和激情总是不断的给我快乐和惊喜。

## 先驱者计划

考虑到这一点,我想分享一下 [先驱者计划](https://www.elastic.co/blog/el ... ogram ) 的一些结果。该计划开始于一个简单的前提,你如何使用 Elastic Stack 对我们来说非常重要,不管是产品研发还是确保发布高质量的可用版本。我非常高兴的告诉大家自四月份发布的第一个Alpha版本,我们的社区一共提交了146个issue。

我们的社区是Elastic其中一个最宝贵的财产。事实上,在这次发布中讨论的最多的就是为什么命名为 "Elastic Stack"。

## Elastic Stack

过去一年,我们收购了Packetbeat 团队,然后Beats 就诞生了。这是一个开源的用于构建轻量级数据收集的平台,可用于日志、基础设施监控指标、网络流量等数据的收集,并且以前所未有的简单方式来将数据发送至Logstash或Elasticsearch。同时我们热爱那些已经习惯于将 ELK 作为代表我们软件栈的你们,只不过加上Beats,我们不知道如何将“B”和E-L-K组合在一起。(NOTE:过去用过ELKB)

但Elastic Stack 远不只是一个名字。当我们开始发布一个周期,我们开发提交、构建、测试和发布的是一整个软件栈。这个很重要,从内部来保证兼容性。并且,对你来说,它可以帮助你提升部署速度,减少版本冲突,让开发者轻松的处理整个 Elastic Stack的兼容性问题。

## 一场特性之旅

在我开始这篇博客之前,我打算列举每个产品的一些主要特性,但是发现好像很难确定从哪里开始和结束。我们每个产品和技术的leader 已经创建了单独的博客来讨论各自产品的特性,没人比他们更适合介绍其中的故事。 我个人,更是对其中的一些特性感到非常兴奋,相较于简单的罗列,我会提供一些简短概要并且鼓励你去阅读每个产品详细的博客。


Ingest Node

Ingest Node 是Elasticsearch 的一个节点类型,允许你对数据做一些加工,比如:grok、geoip、date和其它索引(或重建)过程中的基本数据操作。 通过访问REST API的时候指定一个参数“?pipeline=x”来使用由一系列处理器(processors)构造的管道,它可用帮你对文档进行预处理,原生的在Elasticsearch内部,在索引之前做灵活的 ingest部署。这不代表要替换掉Logstash,也不会移除对Beats的需要,只为你设计数据采集架构时提供一种更加灵活的可能性。

Elasticsearch 性能

性能报告倾向于提供一个大纲,尤其是比较性的性能测试报告,基于此,我们花了很大力气来比较5.0.0 与之前发布的版本。数据现在已经可用了,这个数据也是我们用来检查和确保我们正在做正确的事情来保证性能,我们是如此的公开来避免由性能测试数字引起的所谓秘密和怀疑。事实上,不止测试结果,我们还公布了我们的硬件和配置,我们还开源了我们的工具链(叫做 [Rally](https://github.com/elastic/rally )) 和测试记录本身([Rally-Tracks](https://github.com/elastic/rally-tracks ))。

Metricbeat

Metricbeat 替换 Topbeat 成为Elastic Stack里主要的收集度量指标的工具。和Topbeat一样,Metricbeat 收集和“top” 类似的诸如机器及进程的资源(CPU, memory, disk, network)统计信息。和Topbeat不同的是,Metricbeat 同时也收集其它系统的指标信息,如:Apache、HAProxy、MongoDB、MySQL、Nginx、PostgreSQL、 Redis和 Zookeeper,并且在不久的将来还会支持更多应用和系统。

Logstash 监控 API** - 这是一个新的监控特性提供Logstash 管道及其插件在运行时的可视状态。这个组件收集Logstash处理你数据的各种操作性统计指标信息,所有的这些信息都可通过简单的API来进行查询。

Timelion

以前以re{Search} 项目介绍过,现在Timelion 作为Kibana原生的核心组件可直接可用。Timelion 提供一个查询表达式和可视化类型让你探索基于时间的数据。

再列举几个,诸如BKD 树、scaled_float 和 half_float ,我们投入了大量的精力到 [Elasticsearch 可靠性](https://www.elastic.co/guide/e ... .html ) 中,另外Kibana惊艳的重新设计(我从来不知道我们以前有这么讨厌这些边框直到移除), Beats 支持的Kafaka输出,等等,还有很多很多。

这是一个非常大的版本发布,非常有必要阅读相关独立的博客来了解更多范围内的改进。






## X-Pack

在Elastic 我们热爱扩展。太多我们构建的东西我们给他们起了非常有趣的名字,如:Shield、Marvel和Watcher,作为提供给我们客户的额外的插件,独立闭源但没限制开源部分的能力的特性,随着后面又增加了Graph 和Reporting,安装流程也变得困难和困惑。

来和X-Pack 打个招呼吧!

一个包含了security、alerting、monitoring & management、reporting和graph 能力的Elastic Stack的插件。我们对5.0的工程不仅限于Elastic Stack,同时也包括给X-Pack 添加如下:
  1. Kibana里的管理和监控的UI界面
  2. Kibana里创建用户和角色的UI界面
  3. 非常简化的安装流程


X-Pack 可以试用,同时提供商业和免费(基本)授权证书选项。我们尤其兴奋的将X-Pack的某些特性开放出来免费使用,详细请见 [Subscriptions](https://www.elastic.co/subscriptions ) 页。

## 放在最后

我敬畏发布此次版本所做的所有努力,来自我们社区和客户的共同参与,以及为了将来发布所做的一系列背地里的工作。一如既往,理解一个版本的最好方式就是去体验它。







   
 
继续阅读 »
Snip20161027_6.png

作者:Shay Banon,原文:https://www.elastic.co/blog/el ... eased 

记得在 2016 年 2 月份,就在 Elastic{ON} 16 大会之后,我写了一篇标题为 [Heya, Elastic Stack and X-Pack] (https://www.elastic.co/blog/he ... -pack ) 的博客。经过了几乎整整一年的努力,中间发布了 5  个 Alpha,1 个 Beta 和一个 RC 版本,今天我们非常高兴的正式宣布发布 Elastic Stack 的 GA 正式版本。

并且,重要的是,于此同时,在我们的 [Elastic Cloud](https://www.elastic.co/cloud/as-a-service/signup ) 上面也同步进行了更新。所以如果你需要托管的 Elasticsearch 和 Kibana ,那么没有其它地方比这里更及时了。我们致力于让 Elastic Cloud 成为一个托管 Elasticsearch 的最佳场所。事实上,在正式版发布之前,我们也提供了 RC 版本方便你用于测试。

我们的团队今天正在庆祝这一时刻,我希望你能加入我们。

GA 版本今天已经可以下载了,如果要加入 Elastic 团队 11 月 3 号的线上活动,了解更多有关于本次发布和向工程师提问,请点击这里 [注册!](https://www.elastic.co/live/v5 )
 

在开始探索发布详情之前,我想借此机会来回顾一下有哪些背后的事情让我们走到今天。

## 我们的社区

最近的 Elastic{ON} Tour,在每场活动的开场我会讨论我们公司过去几年的简短历史。最近一次活动的高潮是当我宣布我们的累计下载总数达到了七千五百万。当我第一次开始这个项目的时候,我希望她能够被能够被广泛使用,但是我们的社区的热情和激情总是不断的给我快乐和惊喜。

## 先驱者计划

考虑到这一点,我想分享一下 [先驱者计划](https://www.elastic.co/blog/el ... ogram ) 的一些结果。该计划开始于一个简单的前提,你如何使用 Elastic Stack 对我们来说非常重要,不管是产品研发还是确保发布高质量的可用版本。我非常高兴的告诉大家自四月份发布的第一个Alpha版本,我们的社区一共提交了146个issue。

我们的社区是Elastic其中一个最宝贵的财产。事实上,在这次发布中讨论的最多的就是为什么命名为 "Elastic Stack"。

## Elastic Stack

过去一年,我们收购了Packetbeat 团队,然后Beats 就诞生了。这是一个开源的用于构建轻量级数据收集的平台,可用于日志、基础设施监控指标、网络流量等数据的收集,并且以前所未有的简单方式来将数据发送至Logstash或Elasticsearch。同时我们热爱那些已经习惯于将 ELK 作为代表我们软件栈的你们,只不过加上Beats,我们不知道如何将“B”和E-L-K组合在一起。(NOTE:过去用过ELKB)

但Elastic Stack 远不只是一个名字。当我们开始发布一个周期,我们开发提交、构建、测试和发布的是一整个软件栈。这个很重要,从内部来保证兼容性。并且,对你来说,它可以帮助你提升部署速度,减少版本冲突,让开发者轻松的处理整个 Elastic Stack的兼容性问题。

## 一场特性之旅

在我开始这篇博客之前,我打算列举每个产品的一些主要特性,但是发现好像很难确定从哪里开始和结束。我们每个产品和技术的leader 已经创建了单独的博客来讨论各自产品的特性,没人比他们更适合介绍其中的故事。 我个人,更是对其中的一些特性感到非常兴奋,相较于简单的罗列,我会提供一些简短概要并且鼓励你去阅读每个产品详细的博客。


Ingest Node

Ingest Node 是Elasticsearch 的一个节点类型,允许你对数据做一些加工,比如:grok、geoip、date和其它索引(或重建)过程中的基本数据操作。 通过访问REST API的时候指定一个参数“?pipeline=x”来使用由一系列处理器(processors)构造的管道,它可用帮你对文档进行预处理,原生的在Elasticsearch内部,在索引之前做灵活的 ingest部署。这不代表要替换掉Logstash,也不会移除对Beats的需要,只为你设计数据采集架构时提供一种更加灵活的可能性。

Elasticsearch 性能

性能报告倾向于提供一个大纲,尤其是比较性的性能测试报告,基于此,我们花了很大力气来比较5.0.0 与之前发布的版本。数据现在已经可用了,这个数据也是我们用来检查和确保我们正在做正确的事情来保证性能,我们是如此的公开来避免由性能测试数字引起的所谓秘密和怀疑。事实上,不止测试结果,我们还公布了我们的硬件和配置,我们还开源了我们的工具链(叫做 [Rally](https://github.com/elastic/rally )) 和测试记录本身([Rally-Tracks](https://github.com/elastic/rally-tracks ))。

Metricbeat

Metricbeat 替换 Topbeat 成为Elastic Stack里主要的收集度量指标的工具。和Topbeat一样,Metricbeat 收集和“top” 类似的诸如机器及进程的资源(CPU, memory, disk, network)统计信息。和Topbeat不同的是,Metricbeat 同时也收集其它系统的指标信息,如:Apache、HAProxy、MongoDB、MySQL、Nginx、PostgreSQL、 Redis和 Zookeeper,并且在不久的将来还会支持更多应用和系统。

Logstash 监控 API** - 这是一个新的监控特性提供Logstash 管道及其插件在运行时的可视状态。这个组件收集Logstash处理你数据的各种操作性统计指标信息,所有的这些信息都可通过简单的API来进行查询。

Timelion

以前以re{Search} 项目介绍过,现在Timelion 作为Kibana原生的核心组件可直接可用。Timelion 提供一个查询表达式和可视化类型让你探索基于时间的数据。

再列举几个,诸如BKD 树、scaled_float 和 half_float ,我们投入了大量的精力到 [Elasticsearch 可靠性](https://www.elastic.co/guide/e ... .html ) 中,另外Kibana惊艳的重新设计(我从来不知道我们以前有这么讨厌这些边框直到移除), Beats 支持的Kafaka输出,等等,还有很多很多。

这是一个非常大的版本发布,非常有必要阅读相关独立的博客来了解更多范围内的改进。






## X-Pack

在Elastic 我们热爱扩展。太多我们构建的东西我们给他们起了非常有趣的名字,如:Shield、Marvel和Watcher,作为提供给我们客户的额外的插件,独立闭源但没限制开源部分的能力的特性,随着后面又增加了Graph 和Reporting,安装流程也变得困难和困惑。

来和X-Pack 打个招呼吧!

一个包含了security、alerting、monitoring & management、reporting和graph 能力的Elastic Stack的插件。我们对5.0的工程不仅限于Elastic Stack,同时也包括给X-Pack 添加如下:
  1. Kibana里的管理和监控的UI界面
  2. Kibana里创建用户和角色的UI界面
  3. 非常简化的安装流程


X-Pack 可以试用,同时提供商业和免费(基本)授权证书选项。我们尤其兴奋的将X-Pack的某些特性开放出来免费使用,详细请见 [Subscriptions](https://www.elastic.co/subscriptions ) 页。

## 放在最后

我敬畏发布此次版本所做的所有努力,来自我们社区和客户的共同参与,以及为了将来发布所做的一系列背地里的工作。一如既往,理解一个版本的最好方式就是去体验它。







   
  收起阅读 »

elasticsearch-analysis-pinyin更新至es2.4.1和5.0.0-rc1

版本分别支持到最新的 es v2.4.1和 es v5.0.0-rc1
新增若干特性,支持多种选项配置,支持 pinyin 的切分,比之前需要结合 ngram 的方式更加准确,
如:liudehuaalibaba13zhuanghan->liu,de,hua,a,li,ba,ba,13,zhuang,han,
具体配置参加文档:
https://github.com/medcl/elast ... inyin
 
下载:
https://github.com/medcl/elast ... eases
 
欢迎测试:
curl -XPUT http://localhost:9200/medcl/ -d'
{
"index" : {
"analysis" : {
"analyzer" : {
"pinyin_analyzer" : {
"tokenizer" : "my_pinyin"
}
},
"tokenizer" : {
"my_pinyin" : {
"type" : "pinyin",
"keep_separate_first_letter" : false,
"keep_full_pinyin" : true,
"keep_original" : false,
"limit_first_letter_length" : 16,
"lowercase" : true
}
}
}
}
}'

curl http://localhost:9200/medcl/_a ... lyzer
{
"tokens" : [ {
"token" : "liu",
"start_offset" : 0,
"end_offset" : 1,
"type" : "word",
"position" : 0
}, {
"token" : "de",
"start_offset" : 1,
"end_offset" : 2,
"type" : "word",
"position" : 1
}, {
"token" : "hua",
"start_offset" : 2,
"end_offset" : 3,
"type" : "word",
"position" : 2
}, {
"token" : "a",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 3
}, {
"token" : "b",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 4
}, {
"token" : "c",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 5
}, {
"token" : "d",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 6
}, {
"token" : "liu",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 7
}, {
"token" : "de",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 8
}, {
"token" : "hua",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 9
}, {
"token" : "wo",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 10
}, {
"token" : "bu",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 11
}, {
"token" : "zhi",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 12
}, {
"token" : "dao",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 13
}, {
"token" : "shi",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 14
}, {
"token" : "shui",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 15
}, {
"token" : "ldhabcdliudehuaw",
"start_offset" : 0,
"end_offset" : 16,
"type" : "word",
"position" : 16
} ]
}

 
继续阅读 »
版本分别支持到最新的 es v2.4.1和 es v5.0.0-rc1
新增若干特性,支持多种选项配置,支持 pinyin 的切分,比之前需要结合 ngram 的方式更加准确,
如:liudehuaalibaba13zhuanghan->liu,de,hua,a,li,ba,ba,13,zhuang,han,
具体配置参加文档:
https://github.com/medcl/elast ... inyin
 
下载:
https://github.com/medcl/elast ... eases
 
欢迎测试:
curl -XPUT http://localhost:9200/medcl/ -d'
{
"index" : {
"analysis" : {
"analyzer" : {
"pinyin_analyzer" : {
"tokenizer" : "my_pinyin"
}
},
"tokenizer" : {
"my_pinyin" : {
"type" : "pinyin",
"keep_separate_first_letter" : false,
"keep_full_pinyin" : true,
"keep_original" : false,
"limit_first_letter_length" : 16,
"lowercase" : true
}
}
}
}
}'

curl http://localhost:9200/medcl/_a ... lyzer
{
"tokens" : [ {
"token" : "liu",
"start_offset" : 0,
"end_offset" : 1,
"type" : "word",
"position" : 0
}, {
"token" : "de",
"start_offset" : 1,
"end_offset" : 2,
"type" : "word",
"position" : 1
}, {
"token" : "hua",
"start_offset" : 2,
"end_offset" : 3,
"type" : "word",
"position" : 2
}, {
"token" : "a",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 3
}, {
"token" : "b",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 4
}, {
"token" : "c",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 5
}, {
"token" : "d",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 6
}, {
"token" : "liu",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 7
}, {
"token" : "de",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 8
}, {
"token" : "hua",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 9
}, {
"token" : "wo",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 10
}, {
"token" : "bu",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 11
}, {
"token" : "zhi",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 12
}, {
"token" : "dao",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 13
}, {
"token" : "shi",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 14
}, {
"token" : "shui",
"start_offset" : 2,
"end_offset" : 31,
"type" : "word",
"position" : 15
}, {
"token" : "ldhabcdliudehuaw",
"start_offset" : 0,
"end_offset" : 16,
"type" : "word",
"position" : 16
} ]
}

  收起阅读 »

Elastic{ON} Dev China 2016 开始报名了!

大会网站:https://info.elastic.co/elasticon-dev-china.html 
大会网站:​[url=http://conf.elasticsearch.cn]http://conf.elasticsearch.cn​[/url]
大会介绍:
Elastic 中国开发者大会 2016(Elastic{ON} Dev China 2016)是由 Elastic 官方在中国举办的第一次开发者大会,前身 ESCC (Elasticsearch China Conference) 是由 Elastic 中文社区每年定期举办的线下交流活动,主要围绕 Elastic 的开源产品: Elasticsearch、Logstash、Kibana 和 Beats,探讨在搜索、数据实时分析、日志分析、安全等领域的实践与应用。 

大会时间:
2016-12-10 08:00 至 2016-12-10 18:00 周六
 
如何参与:
提供赞助:http://elasticsearch.mikecrm.com/nECSP4
提交演讲:http://elasticsearch.mikecrm.com/x0y56G
当志愿者:http://elasticsearch.mikecrm.com/n5BVwP
购买门票:http://event.3188.la/460820612/
 
大会具体场地和日程不断更新中,敬请关注!
继续阅读 »
大会网站:https://info.elastic.co/elasticon-dev-china.html 
大会网站:​[url=http://conf.elasticsearch.cn]http://conf.elasticsearch.cn​[/url]
大会介绍:
Elastic 中国开发者大会 2016(Elastic{ON} Dev China 2016)是由 Elastic 官方在中国举办的第一次开发者大会,前身 ESCC (Elasticsearch China Conference) 是由 Elastic 中文社区每年定期举办的线下交流活动,主要围绕 Elastic 的开源产品: Elasticsearch、Logstash、Kibana 和 Beats,探讨在搜索、数据实时分析、日志分析、安全等领域的实践与应用。 

大会时间:
2016-12-10 08:00 至 2016-12-10 18:00 周六
 
如何参与:
提供赞助:http://elasticsearch.mikecrm.com/nECSP4
提交演讲:http://elasticsearch.mikecrm.com/x0y56G
当志愿者:http://elasticsearch.mikecrm.com/n5BVwP
购买门票:http://event.3188.la/460820612/
 
大会具体场地和日程不断更新中,敬请关注! 收起阅读 »

ElasticSearch java API - 聚合查询

以球员信息为例,player索引的player type包含5个字段,姓名,年龄,薪水,球队,场上位置。
index的mapping为:
"mappings": {
"player": {
"properties": {
"name": {
"index": "not_analyzed",
"type": "string"
},
"age": {
"type": "integer"
},
"salary": {
"type": "integer"
},
"team": {
"index": "not_analyzed",
"type": "string"
},
"position": {
"index": "not_analyzed",
"type": "string"
}
},
"_all": {
"enabled": false
}
}
}

索引中的全部数据:

微信截图_20160920171030.png

 
首先,初始化Builder:
SearchRequestBuilder sbuilder = client.prepareSearch("player").setTypes("player");
接下来举例说明各种聚合操作的实现方法,因为在es的api中,多字段上的聚合操作需要用到子聚合(subAggregation),初学者可能找不到方法(网上资料比较少,笔者在这个问题上折腾了两天,最后度了源码才彻底搞清楚T_T),后边会特意说明多字段聚合的实现方法。另外,聚合后的排序也会单独说明。
  • group by/count

例如要计算每个球队的球员数,如果使用SQL语句,应表达如下:
select team, count(*) as player_count from player group by team;
ES的java api:
TermsBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team");
sbuilder.addAggregation(teamAgg);
SearchResponse response = sbuilder.execute().actionGet();
 
  • group by多个field

例如要计算每个球队每个位置的球员数,如果使用SQL语句,应表达如下:
select team, position, count(*) as pos_count from player group by team, position;
ES的java api:
TermsBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team");
TermsBuilder posAgg= AggregationBuilders.terms("pos_count").field("position");
sbuilder.addAggregation(teamAgg.subAggregation(posAgg));
SearchResponse response = sbuilder.execute().actionGet();
 
  • max/min/sum/avg

例如要计算每个球队年龄最大/最小/总/平均的球员年龄,如果使用SQL语句,应表达如下:
select team, max(age) as max_age from player group by team;
ES的java api:
TermsBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team");
MaxBuilder ageAgg= AggregationBuilders.max("max_age").field("age");
sbuilder.addAggregation(teamAgg.subAggregation(ageAgg));
SearchResponse response = sbuilder.execute().actionGet();

  • 对多个field求max/min/sum/avg

例如要计算每个球队球员的平均年龄,同时又要计算总年薪,如果使用SQL语句,应表达如下:
select team, avg(age)as avg_age, sum(salary) as total_salary from player group by team;
ES的java api:
TermsBuilder teamAgg= AggregationBuilders.terms("team");
AvgBuilder ageAgg= AggregationBuilders.avg("avg_age").field("age");
SumBuilder salaryAgg= AggregationBuilders.avg("total_salary ").field("salary");
sbuilder.addAggregation(teamAgg.subAggregation(ageAgg).subAggregation(salaryAgg));
SearchResponse response = sbuilder.execute().actionGet();
 
  • 聚合后对Aggregation结果排序

例如要计算每个球队总年薪,并按照总年薪倒序排列,如果使用SQL语句,应表达如下:
select team, sum(salary) as total_salary from player group by team order by total_salary desc;
ES的java api:
TermsBuilder teamAgg= AggregationBuilders.terms("team").order(Order.aggregation("total_salary ", false);
SumBuilder salaryAgg= AggregationBuilders.avg("total_salary ").field("salary");
sbuilder.addAggregation(teamAgg.subAggregation(salaryAgg));
SearchResponse response = sbuilder.execute().actionGet();
需要特别注意的是,排序是在TermAggregation处执行的,Order.aggregation函数的第一个参数是aggregation的名字,第二个参数是boolean型,true表示正序,false表示倒序。 
  • Aggregation结果条数的问题

默认情况下,search执行后,仅返回10条聚合结果,如果想反悔更多的结果,需要在构建TermsBuilder 时指定size:
TermsBuilder teamAgg= AggregationBuilders.terms("team").size(15);
 
  • Aggregation结果的解析/输出

得到response后:
Map<String, Aggregation> aggMap = response.getAggregations().asMap();
StringTerms teamAgg= (StringTerms) aggMap.get("keywordAgg");
Iterator<Bucket> teamBucketIt = teamAgg.getBuckets().iterator();
while (teamBucketIt .hasNext()) {
Bucket buck = teamBucketIt .next();
//球队名
String team = buck.getKey();
//记录数
long count = buck.getDocCount();
//得到所有子聚合
Map subaggmap = buck.getAggregations().asMap();
//avg值获取方法
double avg_age= ((InternalAvg) subaggmap.get("avg_age")).getValue();
//sum值获取方法
double total_salary = ((InternalSum) subaggmap.get("total_salary")).getValue();
//...
//max/min以此类推
}
 
  • 总结

综上,聚合操作主要是调用了SearchRequestBuilder的addAggregation方法,通常是传入一个TermsBuilder,子聚合调用TermsBuilder的subAggregation方法,可以添加的子聚合有TermsBuilder、SumBuilder、AvgBuilder、MaxBuilder、MinBuilder等常见的聚合操作。
 
从实现上来讲,SearchRequestBuilder在内部保持了一个私有的 SearchSourceBuilder实例, SearchSourceBuilder内部包含一个List<AbstractAggregationBuilder>,每次调用addAggregation时会调用 SearchSourceBuilder实例,添加一个AggregationBuilder。
同样的,TermsBuilder也在内部保持了一个List<AbstractAggregationBuilder>,调用addAggregation方法(来自父类addAggregation)时会添加一个AggregationBuilder。有兴趣的读者也可以阅读源码的实现。
 
如果有什么问题,欢迎一起讨论,如果文中有什么错误,欢迎批评指正。
 
注:文中使用的Elastic Search API版本为2.3.2






 
继续阅读 »
以球员信息为例,player索引的player type包含5个字段,姓名,年龄,薪水,球队,场上位置。
index的mapping为:
"mappings": {
"player": {
"properties": {
"name": {
"index": "not_analyzed",
"type": "string"
},
"age": {
"type": "integer"
},
"salary": {
"type": "integer"
},
"team": {
"index": "not_analyzed",
"type": "string"
},
"position": {
"index": "not_analyzed",
"type": "string"
}
},
"_all": {
"enabled": false
}
}
}

索引中的全部数据:

微信截图_20160920171030.png

 
首先,初始化Builder:
SearchRequestBuilder sbuilder = client.prepareSearch("player").setTypes("player");
接下来举例说明各种聚合操作的实现方法,因为在es的api中,多字段上的聚合操作需要用到子聚合(subAggregation),初学者可能找不到方法(网上资料比较少,笔者在这个问题上折腾了两天,最后度了源码才彻底搞清楚T_T),后边会特意说明多字段聚合的实现方法。另外,聚合后的排序也会单独说明。
  • group by/count

例如要计算每个球队的球员数,如果使用SQL语句,应表达如下:
select team, count(*) as player_count from player group by team;
ES的java api:
TermsBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team");
sbuilder.addAggregation(teamAgg);
SearchResponse response = sbuilder.execute().actionGet();
 
  • group by多个field

例如要计算每个球队每个位置的球员数,如果使用SQL语句,应表达如下:
select team, position, count(*) as pos_count from player group by team, position;
ES的java api:
TermsBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team");
TermsBuilder posAgg= AggregationBuilders.terms("pos_count").field("position");
sbuilder.addAggregation(teamAgg.subAggregation(posAgg));
SearchResponse response = sbuilder.execute().actionGet();
 
  • max/min/sum/avg

例如要计算每个球队年龄最大/最小/总/平均的球员年龄,如果使用SQL语句,应表达如下:
select team, max(age) as max_age from player group by team;
ES的java api:
TermsBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team");
MaxBuilder ageAgg= AggregationBuilders.max("max_age").field("age");
sbuilder.addAggregation(teamAgg.subAggregation(ageAgg));
SearchResponse response = sbuilder.execute().actionGet();

  • 对多个field求max/min/sum/avg

例如要计算每个球队球员的平均年龄,同时又要计算总年薪,如果使用SQL语句,应表达如下:
select team, avg(age)as avg_age, sum(salary) as total_salary from player group by team;
ES的java api:
TermsBuilder teamAgg= AggregationBuilders.terms("team");
AvgBuilder ageAgg= AggregationBuilders.avg("avg_age").field("age");
SumBuilder salaryAgg= AggregationBuilders.avg("total_salary ").field("salary");
sbuilder.addAggregation(teamAgg.subAggregation(ageAgg).subAggregation(salaryAgg));
SearchResponse response = sbuilder.execute().actionGet();
 
  • 聚合后对Aggregation结果排序

例如要计算每个球队总年薪,并按照总年薪倒序排列,如果使用SQL语句,应表达如下:
select team, sum(salary) as total_salary from player group by team order by total_salary desc;
ES的java api:
TermsBuilder teamAgg= AggregationBuilders.terms("team").order(Order.aggregation("total_salary ", false);
SumBuilder salaryAgg= AggregationBuilders.avg("total_salary ").field("salary");
sbuilder.addAggregation(teamAgg.subAggregation(salaryAgg));
SearchResponse response = sbuilder.execute().actionGet();
需要特别注意的是,排序是在TermAggregation处执行的,Order.aggregation函数的第一个参数是aggregation的名字,第二个参数是boolean型,true表示正序,false表示倒序。 
  • Aggregation结果条数的问题

默认情况下,search执行后,仅返回10条聚合结果,如果想反悔更多的结果,需要在构建TermsBuilder 时指定size:
TermsBuilder teamAgg= AggregationBuilders.terms("team").size(15);
 
  • Aggregation结果的解析/输出

得到response后:
Map<String, Aggregation> aggMap = response.getAggregations().asMap();
StringTerms teamAgg= (StringTerms) aggMap.get("keywordAgg");
Iterator<Bucket> teamBucketIt = teamAgg.getBuckets().iterator();
while (teamBucketIt .hasNext()) {
Bucket buck = teamBucketIt .next();
//球队名
String team = buck.getKey();
//记录数
long count = buck.getDocCount();
//得到所有子聚合
Map subaggmap = buck.getAggregations().asMap();
//avg值获取方法
double avg_age= ((InternalAvg) subaggmap.get("avg_age")).getValue();
//sum值获取方法
double total_salary = ((InternalSum) subaggmap.get("total_salary")).getValue();
//...
//max/min以此类推
}
 
  • 总结

综上,聚合操作主要是调用了SearchRequestBuilder的addAggregation方法,通常是传入一个TermsBuilder,子聚合调用TermsBuilder的subAggregation方法,可以添加的子聚合有TermsBuilder、SumBuilder、AvgBuilder、MaxBuilder、MinBuilder等常见的聚合操作。
 
从实现上来讲,SearchRequestBuilder在内部保持了一个私有的 SearchSourceBuilder实例, SearchSourceBuilder内部包含一个List<AbstractAggregationBuilder>,每次调用addAggregation时会调用 SearchSourceBuilder实例,添加一个AggregationBuilder。
同样的,TermsBuilder也在内部保持了一个List<AbstractAggregationBuilder>,调用addAggregation方法(来自父类addAggregation)时会添加一个AggregationBuilder。有兴趣的读者也可以阅读源码的实现。
 
如果有什么问题,欢迎一起讨论,如果文中有什么错误,欢迎批评指正。
 
注:文中使用的Elastic Search API版本为2.3.2






  收起阅读 »

成都地区Elastic中文社区线下活动通知公告!!!

Elastic中文社区技术沙龙【成都站】即将开始咯!
    Elastic 中文社区联手成都卡莱博尔信息技术股份有限公司共同举办线下技术分享会,欢迎对elastic、搜索引擎、大数据等相关技术感兴趣的朋友来参加。
   卡莱博尔是一家以“大数据、移动智能和认知计算”技术为核心的高新技术企业,公司坐落于成都市高新区天府五街,致力于成为中国高端装备产业大数据应用产品和服务提供商,主要为“国防军工、民用航空、先进船舶、轨道交通、电力能源”等装备行业,提供基于装备运行全生命周期故障预测与健康管理相关的大数据技术支撑和运营服务。
    ElasticSearch(下文简称ES)是当前流行的企业级搜索引擎,它提供了一个分布式多用户能力的全文搜索引擎。大数据时代ES能够提供简单易用的方式帮助企业从大型数据库中快速提取有效信息进行分析。
主办方:elastic中文社区        http://elasticsearch.cn/article/101
协办方:成都卡莱博尔信息技术股份有限公司  http://www.cdcalabar.com
 
海报图标.png


活动信息:
活动时间:2016年10月29日 下午13:00-17:30(本周六)
活动地点:成都市高新区天府软件园E区1栋10楼  成都卡莱博尔信息技术股份有限公司 多功能会议厅
           (活动地点如有变化,会提前通知)
场地容量:60人
活动费用:免费 
交通信息:地铁1号线  天府五街站下车  E区1栋10楼

分享主题:
(1)ES 在多维分析中的使用​  —— 李峰@ logicmonitor    logicmonitor数据平台高级工程师 
                                                     专注于hadoop生态系统相关实数数据的存储计算
(2)ElasticStack V5 新特性与变化   —— Medcl@elastic  Elastic中文社区创始人和布道师
ElasticStack包括Elasticsearch、Logstash、Kibana和Beats,ElasticStack将在过段时间发布一个V5.0全新版本,这次的分享将给大家介绍一下5.0版里面各个产品的一些新的特性和改进。曾勇是Elasticsearch国内首批用户,自2010年起就开始接触Elasticsearch并投入到生产环境中使用,并编写过一系列的中文处理相关的插件,是Elasticsearch中文社区发起人,筹办了一系列线上线下的Elasticsearch技术分享与交流活动,出于对Elasticsearch的喜爱,目前已全职加入Elasticsearch项目背后的Elastic公司。
(3)探究ES的内部存储结构  —— 林添@ logicmonitor    logicmonitor后端高级工程师  
                                   
PPT资料链接:[url=https://github.com/rudyLi/es-chengdu-meetup-share]https://github.com/rudyLi/es-chengdu-meetup-share​[/url] 

报名方式:
 (1)报名连接:http://www.jsform.com/web/form ... fc6a6
 (2)扫描下面微信二维码加入成都Elastic微信群,无法扫描的同学加我微信(xcx_2013),我来拉你进群。电话:15008467351

真诚邀请对elastic技术、搜索引擎技术、大数据存储索引可视化、大数据分析、日志分析等技术感兴趣的朋友前来交流和分享。
 
继续阅读 »
Elastic中文社区技术沙龙【成都站】即将开始咯!
    Elastic 中文社区联手成都卡莱博尔信息技术股份有限公司共同举办线下技术分享会,欢迎对elastic、搜索引擎、大数据等相关技术感兴趣的朋友来参加。
   卡莱博尔是一家以“大数据、移动智能和认知计算”技术为核心的高新技术企业,公司坐落于成都市高新区天府五街,致力于成为中国高端装备产业大数据应用产品和服务提供商,主要为“国防军工、民用航空、先进船舶、轨道交通、电力能源”等装备行业,提供基于装备运行全生命周期故障预测与健康管理相关的大数据技术支撑和运营服务。
    ElasticSearch(下文简称ES)是当前流行的企业级搜索引擎,它提供了一个分布式多用户能力的全文搜索引擎。大数据时代ES能够提供简单易用的方式帮助企业从大型数据库中快速提取有效信息进行分析。
主办方:elastic中文社区        http://elasticsearch.cn/article/101
协办方:成都卡莱博尔信息技术股份有限公司  http://www.cdcalabar.com
 
海报图标.png


活动信息:
活动时间:2016年10月29日 下午13:00-17:30(本周六)
活动地点:成都市高新区天府软件园E区1栋10楼  成都卡莱博尔信息技术股份有限公司 多功能会议厅
           (活动地点如有变化,会提前通知)
场地容量:60人
活动费用:免费 
交通信息:地铁1号线  天府五街站下车  E区1栋10楼

分享主题:
(1)ES 在多维分析中的使用​  —— 李峰@ logicmonitor    logicmonitor数据平台高级工程师 
                                                     专注于hadoop生态系统相关实数数据的存储计算
(2)ElasticStack V5 新特性与变化   —— Medcl@elastic  Elastic中文社区创始人和布道师
ElasticStack包括Elasticsearch、Logstash、Kibana和Beats,ElasticStack将在过段时间发布一个V5.0全新版本,这次的分享将给大家介绍一下5.0版里面各个产品的一些新的特性和改进。曾勇是Elasticsearch国内首批用户,自2010年起就开始接触Elasticsearch并投入到生产环境中使用,并编写过一系列的中文处理相关的插件,是Elasticsearch中文社区发起人,筹办了一系列线上线下的Elasticsearch技术分享与交流活动,出于对Elasticsearch的喜爱,目前已全职加入Elasticsearch项目背后的Elastic公司。
(3)探究ES的内部存储结构  —— 林添@ logicmonitor    logicmonitor后端高级工程师  
                                   
PPT资料链接:[url=https://github.com/rudyLi/es-chengdu-meetup-share]https://github.com/rudyLi/es-chengdu-meetup-share​[/url] 

报名方式:
 (1)报名连接:http://www.jsform.com/web/form ... fc6a6
 (2)扫描下面微信二维码加入成都Elastic微信群,无法扫描的同学加我微信(xcx_2013),我来拉你进群。电话:15008467351

真诚邀请对elastic技术、搜索引擎技术、大数据存储索引可视化、大数据分析、日志分析等技术感兴趣的朋友前来交流和分享。
  收起阅读 »

如何反向设置es mapping template

比如,由logstash打到es中的数据,除了其中一个字段比如message,其余字段都想设置为not analyzed,这种情况如何设置?貌似目前es只支持设置那些具体的字段为not analyzed,而不能反过来设置啊?
比如,由logstash打到es中的数据,除了其中一个字段比如message,其余字段都想设置为not analyzed,这种情况如何设置?貌似目前es只支持设置那些具体的字段为not analyzed,而不能反过来设置啊?

Elastic中文社区【深圳】第一次线下活动 开始报名啦!

Elastic中文社区技术沙龙【深圳站】 

es-vmic-weixin.png



PPT 下载: https://github.com/node/esmeetup-shenzhen2016 

活动现场:
Elastic技术沙龙_深圳站_大合影_final.jpg



活动信息:
  • 活动时间:2016年9月10日 下午13:00
  • 活动地点:深圳市福田区上梅林地铁站 安得街89号步步高大楼1楼
  • 场地容量:100人
  • 活动费用:免费 ( 现场有福利派发 : )
  • 交通信息:地铁4号龙华线 上梅林站 ,公交 万科大厦站
  • 参考地标:梅林天虹西侧,卓越城对面


报名方式:

qrcode.jpg


真诚邀请对elastic技术栈,搜索引擎技术,大数据存储索引可视化,日志分析等技术感兴趣的朋友前来交流和分享。

分享主题:
  • ElasticStack V5 新特性与变化              By 曾勇@elastic  Elastic开发工程师与技术布道师ElasticStack包括Elasticsearch、Logstash、Kibana和Beats,ElasticStack将在过段时间发布一个V5.0全新版本,这次的分享将给大家介绍一下5.0版里面各个产品的一些新的特性和改进。曾勇是Elasticsearch国内首批用户,自2010年起就开始接触Elasticsearch并投入到生产环境中使用,并编写过一系列的中文处理相关的插件,是Elasticsearch中文社区发起人,筹办了一系列线上线下的Elasticsearch技术分享与交流活动,出于对Elasticsearch的喜爱,目前已全职加入Elasticsearch项目背后的Elastic公司。
  • ELK应用 --- 一卡易实时日志分析平台   By 夏小成@一卡易   一线码农目前一卡易实时日志分析平台汇集了包括windows事务日志、linux日志、haproxy访问日志、业务数据库审计日志和大数据平台日志,为一卡易数十个产品线提供了便捷的日志检索和分析服务。未来我们会把elasticsearch逐渐引入到我们的业务系统,更深层次挖掘她的魅力。
  • 构建数据驱动的动画工作室 - es及ELK实践          By 赵昆@东方梦工厂   IT与数据系统工程师
  • 京东日志系统es运维经验分享及es源码改造实践   By 成睿 @京东曾负责京东日志系统的搜索平台,目前负责京东到家商品搜索平台。介绍京东日志系统es的一些运维经验和我2次改es源代码的实践。




----------------------------------------------------------------------------------
联络邮件: nodexy@qq.com 或者直接站内私信。----------------------------------------------------------------------------------

 
继续阅读 »
Elastic中文社区技术沙龙【深圳站】 

es-vmic-weixin.png



PPT 下载: https://github.com/node/esmeetup-shenzhen2016 

活动现场:
Elastic技术沙龙_深圳站_大合影_final.jpg



活动信息:
  • 活动时间:2016年9月10日 下午13:00
  • 活动地点:深圳市福田区上梅林地铁站 安得街89号步步高大楼1楼
  • 场地容量:100人
  • 活动费用:免费 ( 现场有福利派发 : )
  • 交通信息:地铁4号龙华线 上梅林站 ,公交 万科大厦站
  • 参考地标:梅林天虹西侧,卓越城对面


报名方式:

qrcode.jpg


真诚邀请对elastic技术栈,搜索引擎技术,大数据存储索引可视化,日志分析等技术感兴趣的朋友前来交流和分享。

分享主题:
  • ElasticStack V5 新特性与变化              By 曾勇@elastic  Elastic开发工程师与技术布道师ElasticStack包括Elasticsearch、Logstash、Kibana和Beats,ElasticStack将在过段时间发布一个V5.0全新版本,这次的分享将给大家介绍一下5.0版里面各个产品的一些新的特性和改进。曾勇是Elasticsearch国内首批用户,自2010年起就开始接触Elasticsearch并投入到生产环境中使用,并编写过一系列的中文处理相关的插件,是Elasticsearch中文社区发起人,筹办了一系列线上线下的Elasticsearch技术分享与交流活动,出于对Elasticsearch的喜爱,目前已全职加入Elasticsearch项目背后的Elastic公司。
  • ELK应用 --- 一卡易实时日志分析平台   By 夏小成@一卡易   一线码农目前一卡易实时日志分析平台汇集了包括windows事务日志、linux日志、haproxy访问日志、业务数据库审计日志和大数据平台日志,为一卡易数十个产品线提供了便捷的日志检索和分析服务。未来我们会把elasticsearch逐渐引入到我们的业务系统,更深层次挖掘她的魅力。
  • 构建数据驱动的动画工作室 - es及ELK实践          By 赵昆@东方梦工厂   IT与数据系统工程师
  • 京东日志系统es运维经验分享及es源码改造实践   By 成睿 @京东曾负责京东日志系统的搜索平台,目前负责京东到家商品搜索平台。介绍京东日志系统es的一些运维经验和我2次改es源代码的实践。




----------------------------------------------------------------------------------
联络邮件: nodexy@qq.com 或者直接站内私信。----------------------------------------------------------------------------------

  收起阅读 »

kibana使用echarts

最近被催着要在kibana里加入关系图(社交网络类似的),然后百度的echarts支持关系图。之前一直以为修改kibana加入echarts会很难(因为node我不会,angularjs我也不会。。。),直到今天被逼要在几天之内加入关系图,我发现,加入echarts真的不太难!
我的做法是
①cd 进kibana的根目录,然后vim package.json,在dependencies中加入"echarts":"3.2.2"(key value结构,3.2.2是echarts最新版本)
②在kibana根目录使用npm update命令,会自动下载echats.
③npm start 开启debug模式
④在要修改的js 文件中加入let echarts=requrie("echarts");即可调用echarts进行开发了!
 
继续阅读 »
最近被催着要在kibana里加入关系图(社交网络类似的),然后百度的echarts支持关系图。之前一直以为修改kibana加入echarts会很难(因为node我不会,angularjs我也不会。。。),直到今天被逼要在几天之内加入关系图,我发现,加入echarts真的不太难!
我的做法是
①cd 进kibana的根目录,然后vim package.json,在dependencies中加入"echarts":"3.2.2"(key value结构,3.2.2是echarts最新版本)
②在kibana根目录使用npm update命令,会自动下载echats.
③npm start 开启debug模式
④在要修改的js 文件中加入let echarts=requrie("echarts");即可调用echarts进行开发了!
  收起阅读 »

在一个Elasticsearch集群中可以使用过个版本数据节点共存吗?

我们现在Elasticsearch的版本较老,然后数据量比较大,我不知道有平滑升级的方案不?如果有,该怎么做?如果没有,我是否可以把新版本的节点加入到老版本的集群中使用,两个版本共存,然后最后老数据删除,老版本的数据节点也就删除了,想问一下我想的方案是否可行?
 
两个版本共存在一个集群中,会出现哪些可预知的问题?还希望了解的同学回答一下?谢谢!
继续阅读 »
我们现在Elasticsearch的版本较老,然后数据量比较大,我不知道有平滑升级的方案不?如果有,该怎么做?如果没有,我是否可以把新版本的节点加入到老版本的集群中使用,两个版本共存,然后最后老数据删除,老版本的数据节点也就删除了,想问一下我想的方案是否可行?
 
两个版本共存在一个集群中,会出现哪些可预知的问题?还希望了解的同学回答一下?谢谢! 收起阅读 »

laravel5.2 & es2.3.4 Demo

http://laravel.fuxiben.com/elastic  测试地址 
https://github.com/zhuowenji/Laravel5.2-Demo   github地址 
 
 
搞了一晚上,头疼,高亮,分页,高级搜索还没搞。大家有建议或者 demo的一起分享下!
继续阅读 »
http://laravel.fuxiben.com/elastic  测试地址 
https://github.com/zhuowenji/Laravel5.2-Demo   github地址 
 
 
搞了一晚上,头疼,高亮,分页,高级搜索还没搞。大家有建议或者 demo的一起分享下! 收起阅读 »

尝试翻译 ElasticSearch 官方文档

最近有翻译官网文档的念头,从上周开始陆陆续续的抽时间翻译,因为工作比较忙,都是晚上熬夜开始翻译的。想要翻译官方文档的原因主要有这几点:
  1. 官方文档写的比较好,例子多,容易理解;
  2. 已有的翻译资料感觉并不是很完善,要么只翻译了一部分,要么版本很旧,很久没人维护(有人翻译 ElasticSearch 权威指南,这个还是不错);
  3. 自己在工作中经常用到 ElasticSearch,感觉 ElasticSearch 非常强大,帮助我们解决了很多问题,让我有激情去更深入的探索;
  4. 希望可以帮助到别人;

 
github:  https://github.com/liuzxc/Elas ... ce_cn
 
read online :   https://liuzxc.gitbooks.io/ela ... tent/
 
我现在基本上每天翻译 1- 2 节的样子,会持续更新下去,有兴趣的伙伴可以加入进来一起搞!
继续阅读 »
最近有翻译官网文档的念头,从上周开始陆陆续续的抽时间翻译,因为工作比较忙,都是晚上熬夜开始翻译的。想要翻译官方文档的原因主要有这几点:
  1. 官方文档写的比较好,例子多,容易理解;
  2. 已有的翻译资料感觉并不是很完善,要么只翻译了一部分,要么版本很旧,很久没人维护(有人翻译 ElasticSearch 权威指南,这个还是不错);
  3. 自己在工作中经常用到 ElasticSearch,感觉 ElasticSearch 非常强大,帮助我们解决了很多问题,让我有激情去更深入的探索;
  4. 希望可以帮助到别人;

 
github:  https://github.com/liuzxc/Elas ... ce_cn
 
read online :   https://liuzxc.gitbooks.io/ela ... tent/
 
我现在基本上每天翻译 1- 2 节的样子,会持续更新下去,有兴趣的伙伴可以加入进来一起搞! 收起阅读 »

Packetbeat的Cassandra协议扩展

论坛有多少人在用Cassandra的啊?弄了一个Cassandra的协议,有在用的Cassandra么?帮忙测试一下,看看有没有bug,
欢迎反馈。
 
https://github.com/elastic/beats/pull/1959
 
继续阅读 »
论坛有多少人在用Cassandra的啊?弄了一个Cassandra的协议,有在用的Cassandra么?帮忙测试一下,看看有没有bug,
欢迎反馈。
 
https://github.com/elastic/beats/pull/1959
  收起阅读 »

Lucene5.5入门第十篇完结篇——使用Highlighter使关键词高亮

前言

我们在使用百度和谷歌等搜索引擎的时候,你会发现,搜索引擎会把和我们输入的关键字以红色的字体显示,来突出显示结果的准确性,这就是高亮显示的使用场景

准备

使用Highlighter需要导入相应的jar包,maven项目可以加入如下依赖

<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-highlighter</artifactId>
<version>5.5.0</version>
</dependency>

直接看代码


/**
* @author kl by 2016/3/19
* @boke www.kailing.pub
*/
public class FieldSetBoostTest {
//索引目录
String indexDir="E:\\LuceneIndex";
//测试数据
String theme="中国";
String []title={"中国是一个伟大的国家","我爱你的的祖国,美丽的中国","是什么,中国令美日等国虎视眈眈"};
/**
* Lucence5.5返回IndexWriter实例
* @param directory
* @return
*/
public IndexWriter getIndexWriter(Directory directory){
Analyzer analyzer=new CJKAnalyzer();//中日韩二元分词
IndexWriterConfig writerConfig=new IndexWriterConfig(analyzer);
IndexWriter writer=null;
try {
writer =new IndexWriter(directory,writerConfig);
}catch (Exception e){
e.printStackTrace();
}
return writer;
}
public Directory getDirctory(String indexDir){
Directory directory=null;
try {
directory=FSDirectory.open(Paths.get(indexDir));
}catch (IOException e){
e.printStackTrace();
}
return directory;
}
/**
* 创建索引不加权
* @throws Exception
*/
public void Indexer()throws Exception{
IndexWriter writer=getIndexWriter(getDirctory(indexDir));
Document doc=null;
for(String str:title){
doc=new Document();
//Lucence5.5 Fileld有多个实现,StringFIeld不分词 TextField分词
doc.add(new StringField("theme",theme, Field.Store.YES));
Field field=new TextField("title",str, Field.Store.YES);
doc.add(field);
writer.addDocument(doc);
}
writer.close();
}

/**
* 关键命中词高亮输出处理
* @param query
* @param context
* @return
* @throws Exception
*/
public static String getHighlighterString(Query query,String context)throws Exception{
//对促成文档匹配的实际项进行评分
QueryScorer scorer=new QueryScorer(query);
//设置高亮的HTML标签格式
Formatter simpleHTMLFormatter=new SimpleHTMLFormatter("","");
//实例化高亮分析器
Highlighter highlighter=new Highlighter(simpleHTMLFormatter,scorer);
//提供静态方法,支持从数据源中获取TokenStream,进行token处理
TokenStream tokenStream=new CJKAnalyzer().tokenStream("title", new StringReader(context));
return highlighter.getBestFragment(tokenStream, context);
}
@Test
public void searcherTest()throws Exception{
// Indexer();
IndexReader reader= DirectoryReader.open(getDirctory(indexDir));
IndexSearcher is=new IndexSearcher(reader);
System.out.println("总的文档数:"+reader.numDocs());
QueryParser qp=new QueryParser("title",new CJKAnalyzer());
String q="中国";
Query query=qp.parse(q);
TopDocs tDocs=is.search(query,11);
System.out.println("查询-》"+q+"《-总共命中【"+tDocs.totalHits+"】条结果");
for (ScoreDoc scoredoc:tDocs.scoreDocs){
Document doc = is.doc(scoredoc.doc);
String context=doc.get("title");
if(context!=null){
System.out.println(getHighlighterString(query,context));
}

}
}
}
查询效果如下:

原文地址:http://www.kailing.pub/article/index/arcid/82.html
继续阅读 »
前言

我们在使用百度和谷歌等搜索引擎的时候,你会发现,搜索引擎会把和我们输入的关键字以红色的字体显示,来突出显示结果的准确性,这就是高亮显示的使用场景

准备

使用Highlighter需要导入相应的jar包,maven项目可以加入如下依赖

<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-highlighter</artifactId>
<version>5.5.0</version>
</dependency>

直接看代码


/**
* @author kl by 2016/3/19
* @boke www.kailing.pub
*/
public class FieldSetBoostTest {
//索引目录
String indexDir="E:\\LuceneIndex";
//测试数据
String theme="中国";
String []title={"中国是一个伟大的国家","我爱你的的祖国,美丽的中国","是什么,中国令美日等国虎视眈眈"};
/**
* Lucence5.5返回IndexWriter实例
* @param directory
* @return
*/
public IndexWriter getIndexWriter(Directory directory){
Analyzer analyzer=new CJKAnalyzer();//中日韩二元分词
IndexWriterConfig writerConfig=new IndexWriterConfig(analyzer);
IndexWriter writer=null;
try {
writer =new IndexWriter(directory,writerConfig);
}catch (Exception e){
e.printStackTrace();
}
return writer;
}
public Directory getDirctory(String indexDir){
Directory directory=null;
try {
directory=FSDirectory.open(Paths.get(indexDir));
}catch (IOException e){
e.printStackTrace();
}
return directory;
}
/**
* 创建索引不加权
* @throws Exception
*/
public void Indexer()throws Exception{
IndexWriter writer=getIndexWriter(getDirctory(indexDir));
Document doc=null;
for(String str:title){
doc=new Document();
//Lucence5.5 Fileld有多个实现,StringFIeld不分词 TextField分词
doc.add(new StringField("theme",theme, Field.Store.YES));
Field field=new TextField("title",str, Field.Store.YES);
doc.add(field);
writer.addDocument(doc);
}
writer.close();
}

/**
* 关键命中词高亮输出处理
* @param query
* @param context
* @return
* @throws Exception
*/
public static String getHighlighterString(Query query,String context)throws Exception{
//对促成文档匹配的实际项进行评分
QueryScorer scorer=new QueryScorer(query);
//设置高亮的HTML标签格式
Formatter simpleHTMLFormatter=new SimpleHTMLFormatter("","");
//实例化高亮分析器
Highlighter highlighter=new Highlighter(simpleHTMLFormatter,scorer);
//提供静态方法,支持从数据源中获取TokenStream,进行token处理
TokenStream tokenStream=new CJKAnalyzer().tokenStream("title", new StringReader(context));
return highlighter.getBestFragment(tokenStream, context);
}
@Test
public void searcherTest()throws Exception{
// Indexer();
IndexReader reader= DirectoryReader.open(getDirctory(indexDir));
IndexSearcher is=new IndexSearcher(reader);
System.out.println("总的文档数:"+reader.numDocs());
QueryParser qp=new QueryParser("title",new CJKAnalyzer());
String q="中国";
Query query=qp.parse(q);
TopDocs tDocs=is.search(query,11);
System.out.println("查询-》"+q+"《-总共命中【"+tDocs.totalHits+"】条结果");
for (ScoreDoc scoredoc:tDocs.scoreDocs){
Document doc = is.doc(scoredoc.doc);
String context=doc.get("title");
if(context!=null){
System.out.println(getHighlighterString(query,context));
}

}
}
}
查询效果如下:

原文地址:http://www.kailing.pub/article/index/arcid/82.html 收起阅读 »