愚者求师之过,智者从师之长。

社区日报 第84期 (2017-10-29)

社区日报至尊宝 发表了文章 • 0 个评论 • 2242 次浏览 • 2017-10-29 09:06 • 来自相关话题

1.使用机器学习任务监测异常并向可视化的时间序列添加注释。
http://t.cn/RWH0Oyg
2.父子关系在Elasticsearch中的性能考量。
http://t.cn/RWH0TH3
3.(自备梯子)5天在5家硅谷顶级公司面试,作者如何拿到5份offer。
http://t.cn/RWinyw9

编辑:至尊宝
归档:https://elasticsearch.cn/article/342
订阅:https://tinyletter.com/elastic-daily

多个geo point的业务

回复

Elasticsearch匿名用户 发起了问题 • 1 人关注 • 0 个回复 • 1655 次浏览 • 2017-10-29 07:36 • 来自相关话题

请问下谁能详细讲解下es5的几种缓存。

回复

Elasticsearchmhl 发起了问题 • 4 人关注 • 0 个回复 • 2277 次浏览 • 2017-10-28 11:39 • 来自相关话题

社区日报 第83期 (2017-10-28)

社区日报白衬衣 发表了文章 • 0 个评论 • 1560 次浏览 • 2017-10-28 10:57 • 来自相关话题

1.ES选举-类Bully算法
http://t.cn/RWWD6LM
2.如何更优雅的定制开发elasicsearch插件
https://elasticsearch.cn/article/339
3.你应该了解的5个 Logstash Filter 插件
https://elasticsearch.cn/article/332
活动预告:Elastic 长沙交流会 
https://elasticsearch.cn/article/320

感谢jiangtao,dongne的投稿。
编辑:金桥
归档:https://elasticsearch.cn/article/341
订阅:https://tinyletter.com/elastic-daily

elasticsearch应用开发案例

回复

ElasticsearchsoochowLeo 发起了问题 • 1 人关注 • 0 个回复 • 3497 次浏览 • 2017-10-27 17:14 • 来自相关话题

ReceiveTimeoutTransportException

Elasticsearchouyangzhiming 回复了问题 • 7 人关注 • 8 个回复 • 39867 次浏览 • 2017-10-27 13:01 • 来自相关话题

大批量的index请求走的是bulk api 不是index api

Elasticsearchkennywu76 回复了问题 • 2 人关注 • 1 个回复 • 2856 次浏览 • 2017-10-27 12:12 • 来自相关话题

kibana地图背板是白的

Kibanamedcl 回复了问题 • 2 人关注 • 1 个回复 • 3623 次浏览 • 2017-10-27 12:07 • 来自相关话题

网卡流量过大 packetbeat 频繁重启

Beatsmedcl 回复了问题 • 3 人关注 • 2 个回复 • 3763 次浏览 • 2017-10-27 12:02 • 来自相关话题

es索引无法删除

Elasticsearchmedcl 回复了问题 • 3 人关注 • 2 个回复 • 2873 次浏览 • 2017-10-27 11:56 • 来自相关话题

谁知道hbase数据怎么同步到es

回复

Elasticsearchhelloword 发起了问题 • 2 人关注 • 0 个回复 • 3931 次浏览 • 2017-10-27 11:28 • 来自相关话题

filebeat读取大文件长时间没反应

Beatsnovia 回复了问题 • 2 人关注 • 1 个回复 • 4141 次浏览 • 2017-10-27 09:25 • 来自相关话题

logstash 使用brew services start 启动 如何添加-f参数

Logstashlaoyang360 回复了问题 • 2 人关注 • 1 个回复 • 3024 次浏览 • 2017-10-27 07:18 • 来自相关话题

社区日报 第82期 (2017-10-27)

社区日报laoyang360 发表了文章 • 0 个评论 • 1657 次浏览 • 2017-10-27 06:36 • 来自相关话题

1、基于HBase+ ElasticSearch的车联网的应用
http://t.cn/RWoD1x8 
2、携程大数据实践:高并发应用架构及推荐系统案例
http://t.cn/RWoDFX8 
3、Elasticsearch相关度计算原理
http://t.cn/RWK4SQN 
4、搞清楚logstash、filebeat到底什么区别?
http://t.cn/RWKPDDj 

编辑:laoyang360
归档:https://elasticsearch.cn/article/340
订阅:https://tinyletter.com/elastic-daily 

 

如何更优雅的定制开发elasicsearch插件

Elasticsearchjiangtao 发表了文章 • 2 个评论 • 5588 次浏览 • 2017-10-26 21:06 • 来自相关话题

一,何为优雅:
    在此需要感谢@Medcl,开发了ik,mmseg等为elasticsearch的分词插件,使我们能够比较容易的上手并应用elasticsearch。
   但是我们如果要对插件进行二次定制,或者重新开发一个插件呢。按照官网教程,每次都得打包、替换、重启,这是一个很不方便的过程,固然可以通过testCase来做debug,但是所见即所得的编码习惯,直接上手debug,才是最高效的方式。
   介绍插件开发的博客何其多,个人私以为都没有get到G点,其实深入研究下elasticsearch源码,fix 这个问题并不难,下面希望通过这篇文章帮助到大家。
二,elasticsearch插件的加载机制
①:Node节点启动过程,Elasticsearch.java会调用Bootstrap.java中的init函数。
static void init(...)  {
...
INSTANCE = new Bootstrap();
INSTANCE.setup(true, environment);
...
INSTANCE.start();
}
②:Node节点通过setup方法进行实例化。
 private void setup(boolean addShutdownHook, Environment environment) throws BootstrapException {

node = new Node(environment) {

...
}
③:Node.java类中会包含各类的service服务,其中包括PluginsService服务。在实例化PluginsService服务时会传参
environment.pluginsFile(),classpathPlugins等参数。而pluginsFile()即是elasticsearch所指定的plugin目录,elasticsearch会扫描该路径下所有的插件,并加载进来。
public Node(Environment environment) {
this(environment, Collections.emptyList());
}

protected Node(final Environment environment, Collection<Class<? extends Plugin>> classpathPlugins) {
...
this.pluginsService = new PluginsService(tmpSettings, environment.modulesFile(), environment.pluginsFile(), classpathPlugins);
...
}
④classpathPlugins参数介绍:
public Node(Environment environment) {
this(environment, Collections.emptyList());
}
在elasticsearch源码中,这个参数Collection<Class<? extends Plugin>> classpathPlugins一直都是空集合。
没有任何地方注入修改该参数。elasticsearch不但会扫描插件所在路径中的插件,同样也会加载classpathPlugins中所指定的插件,只不过问题是elasticsearch没有给我们提供相应的参数!!!!
三,如何更优雅的开发开发插件
    接上一段小节④,我们只要利用classpathPlugins该参数,就可以在elasticsearch源码环境中进行debug了!!!
    我的实现思路如下,通过继承Node.java,并重写Node类的构造方法,然后在bootstrap中直接实例化该子类,便可以通过elasticsearch直接bug 插件源码了。
   下面贴出我的实现代码,供大家参考:
/**
* Created by jiangtao on 2017/07/30.
*/

import org.elasticsearch.Version;
import org.elasticsearch.env.Environment;
import org.elasticsearch.node.Node;
import org.elasticsearch.plugins.Plugin;

import java.util.Collection;

public class EmbeddedNode extends Node {

private Version version;
private Collection<Class<? extends Plugin>> plugins;

public EmbeddedNode(Environment environment, Version version, Collection<Class<? extends Plugin>> classpathPlugins) {
super(environment, classpathPlugins);
this.version = version;
this.plugins = classpathPlugins;
}

public Collection<Class<? extends Plugin>> getPlugins() {
return plugins;
}

public Version getVersion() {
return version;
}
}
    private void setup(boolean addShutdownHook, Environment environment) throws BootstrapException {
.....
//注释Node初始化源码
/* node = new Node(environment) {
@Override
protected void validateNodeBeforeAcceptingRequests(
final Settings settings,
final BoundTransportAddress boundTransportAddress, List<BootstrapCheck> checks) throws NodeValidationException {
BootstrapChecks.check(settings, boundTransportAddress, checks);
}
};*/

Collection plugins = new ArrayList<>();
Collections.addAll(plugins, AnalysisIkPlugin.class, HelloPlugin.class, AnalysisMMsegPlugin.class);//, ,AnalysisMMsegPlugin.class
node = new EmbeddedNode(environment, Version.CURRENT, plugins) {
@Override
protected void validateNodeBeforeAcceptingRequests(final Settings settings, final BoundTransportAddress boundTransportAddress, List<BootstrapCheck> checks) throws NodeValidationException {
BootstrapChecks.check(settings, boundTransportAddress, checks);
}
};
}

 
四,部署插件相关的注意事项:
     有关插件开发的详细配置,es插件的种类,在此不再赘述,具体可参考官方文档,更权威,更直接。
下面贴个图,本人在elasticsearch中同时整合了多个插件,以供学习研究时用,直接debug,个人感觉十分不错。

插件.png