Elastic日报 第540期 (2019-02-28)

1、使用ES和树莓派做报警器;
http://t.cn/Efm8eGf
2、opentracing和elastic APM构建微服务分布式追踪系统;
http://t.cn/Ef1dcco
3、Filebeat安装部署及配置详解;
http://t.cn/Ef1gtwq
 
编辑:wt
归档:https://elasticsearch.cn/article/6494
订阅:https://tinyletter.com/elastic-daily
继续阅读 »
1、使用ES和树莓派做报警器;
http://t.cn/Efm8eGf
2、opentracing和elastic APM构建微服务分布式追踪系统;
http://t.cn/Ef1dcco
3、Filebeat安装部署及配置详解;
http://t.cn/Ef1gtwq
 
编辑:wt
归档:https://elasticsearch.cn/article/6494
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

Elastic日报 第539期 (2019-02-27)

1.十年一剑,阿里推荐与搜索引擎平台 AI·OS 首次公开
http://t.cn/EfRty3F
2.Elasticsearch 评分排序
http://t.cn/EfRtYWt
3.Elasticsearch 的查询器 query 与过滤器 filter 的区别
http://t.cn/EfRctYY
 
编辑:江水
归档:https://elasticsearch.cn/article/6403
订阅:https://tinyletter.com/elastic-daily
继续阅读 »
1.十年一剑,阿里推荐与搜索引擎平台 AI·OS 首次公开
http://t.cn/EfRty3F
2.Elasticsearch 评分排序
http://t.cn/EfRtYWt
3.Elasticsearch 的查询器 query 与过滤器 filter 的区别
http://t.cn/EfRctYY
 
编辑:江水
归档:https://elasticsearch.cn/article/6403
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

百度智能云招聘ElasticSearch研发工程师

工作职责:
  • 负责ElasticSearch相关产品的设计、研发、维护
  • 与相关大数据产品制定大数据解决方案
  •  

职责要求:
  • 211或985大学本科毕业,计算机相关专业
  • 熟悉Java/Go语言开发,熟悉常见的数据结构与算法
  • 掌握网络编程和多线程开发
  • 对ElasticSearch、Lucene、Slor的原理有较深入了解。
  • 有对开源组件有过二次开发经验者优先
  • 由社区贡献经验者优先

联系方式:shouchunbai@baidu.com
 
继续阅读 »
工作职责:
  • 负责ElasticSearch相关产品的设计、研发、维护
  • 与相关大数据产品制定大数据解决方案
  •  

职责要求:
  • 211或985大学本科毕业,计算机相关专业
  • 熟悉Java/Go语言开发,熟悉常见的数据结构与算法
  • 掌握网络编程和多线程开发
  • 对ElasticSearch、Lucene、Slor的原理有较深入了解。
  • 有对开源组件有过二次开发经验者优先
  • 由社区贡献经验者优先

联系方式:shouchunbai@baidu.com
  收起阅读 »

Elastic日报 第538期 (2019-02-26)

1、你的Elasticsearch在裸奔吗?
http://t.cn/Ef02jCT
2、如何有效管理Elasticsearch分片使用效率。
http://t.cn/Ef02Rd7
3、Elasticsearch Helm 图表。
http://t.cn/EfOwOQu

PS:Elasticsearch官方培训来中国啦!
https://elasticsearch.cn/article/6400​​

编辑:叮咚光军
归档:https://elasticsearch.cn/article/6401
订阅:https://tinyletter.com/elastic-daily
继续阅读 »
1、你的Elasticsearch在裸奔吗?
http://t.cn/Ef02jCT
2、如何有效管理Elasticsearch分片使用效率。
http://t.cn/Ef02Rd7
3、Elasticsearch Helm 图表。
http://t.cn/EfOwOQu

PS:Elasticsearch官方培训来中国啦!
https://elasticsearch.cn/article/6400​​

编辑:叮咚光军
归档:https://elasticsearch.cn/article/6401
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

Elastic 官方培训来中国啦

Elasticsearch 目前被大家广泛使用,也越来越受到大家欢迎,大家在工作中是否需要经常用到?想要系统的学习 Elasticsearch 么?那么可以参加 Elasticsearch 的官方培训。这也是 Elastic 官方第一次在国内开展的培训。本课程以普通话授课。所有资料均为英语。
 
课程:Elasticsearch 工程师培训 I
时间:
2019 年 4 月 8 日星期一,上午 9:00 - 下午 5:00 
2019 年 4 月 9 日星期二,上午 9:00 - 下午 5:00 
地点:中国北京
详情及报名,请访问:https://training.elastic.co/ENGI/Beijing/April2019
 

课程:Elasticsearch 工程师培训 II
时间:
2019 年 4 月 11 日星期四,上午 9:00 - 下午 5:00 
2019 年 4 月 12 日星期五,上午 9:00 - 下午 5:00 
地点:中国北京
详情及报名,请访问:https://training.elastic.co/EN ... l2019
 
名额有限,有兴趣的同学可以关注一下。
继续阅读 »
Elasticsearch 目前被大家广泛使用,也越来越受到大家欢迎,大家在工作中是否需要经常用到?想要系统的学习 Elasticsearch 么?那么可以参加 Elasticsearch 的官方培训。这也是 Elastic 官方第一次在国内开展的培训。本课程以普通话授课。所有资料均为英语。
 
课程:Elasticsearch 工程师培训 I
时间:
2019 年 4 月 8 日星期一,上午 9:00 - 下午 5:00 
2019 年 4 月 9 日星期二,上午 9:00 - 下午 5:00 
地点:中国北京
详情及报名,请访问:https://training.elastic.co/ENGI/Beijing/April2019
 

课程:Elasticsearch 工程师培训 II
时间:
2019 年 4 月 11 日星期四,上午 9:00 - 下午 5:00 
2019 年 4 月 12 日星期五,上午 9:00 - 下午 5:00 
地点:中国北京
详情及报名,请访问:https://training.elastic.co/EN ... l2019
 
名额有限,有兴趣的同学可以关注一下。 收起阅读 »

Elastic日报 第537期 (2019-02-25)

1.Kibana使用高德地图    
http://t.cn/EfXsbMV

2.elastic stack 6.6尝鲜体验
http://t.cn/EfahzC3

3.ELK日志系统优化过程之Elasticsearch优化
https://fwit.win/?p=1392 ​​​​

编辑:cyberdak
归档:
订阅:https://tinyletter.com/elastic-daily
继续阅读 »
1.Kibana使用高德地图    
http://t.cn/EfXsbMV

2.elastic stack 6.6尝鲜体验
http://t.cn/EfahzC3

3.ELK日志系统优化过程之Elasticsearch优化
https://fwit.win/?p=1392 ​​​​

编辑:cyberdak
归档:
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

Elastic日报 第536期 (2019-02-24)

1.ElasticSearch如何与Mysql集成。
http://t.cn/EffVjlc
2.将数据从MySQL导入Elasticsearch并使用Kibana对其进行可视化。
http://t.cn/EfffRLT
3.(自备梯子)计算的未来是模拟的。
http://t.cn/EffxMjV

编辑:至尊宝
归档:https://elasticsearch.cn/article/6397
订阅:https://tinyletter.com/elastic-daily
继续阅读 »
1.ElasticSearch如何与Mysql集成。
http://t.cn/EffVjlc
2.将数据从MySQL导入Elasticsearch并使用Kibana对其进行可视化。
http://t.cn/EfffRLT
3.(自备梯子)计算的未来是模拟的。
http://t.cn/EffxMjV

编辑:至尊宝
归档:https://elasticsearch.cn/article/6397
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

Elastic日报 第535期 (2019-02-23)

  1. solr以及es的相似度解析 http://t.cn/EfLLxzD

2.搭建ES集群全步骤 http://t.cn/EfLWeSG

  1. 用ElasticSearch实现漏斗用户旅程跟踪服务(自备梯子) http://t.cn/EfLHsOM
继续阅读 »
  1. solr以及es的相似度解析 http://t.cn/EfLLxzD

2.搭建ES集群全步骤 http://t.cn/EfLWeSG

  1. 用ElasticSearch实现漏斗用户旅程跟踪服务(自备梯子) http://t.cn/EfLHsOM
收起阅读 »

ELK 使用小技巧(第 5 期)

ELK Tips 主要介绍一些 ELK 使用过程中的小技巧,内容主要来源为 Elastic 中文社区。

一、Logstash

1、Logstash 性能调优主要参数

  • pipeline.workers:设置启动多少个线程执行 fliter 和 output;当 input 的内容出现堆积而 CPU 使用率还比较充足时,可以考虑增加该参数的大小;
  • pipeline.batch.size:设置单个工作线程在执行过滤器和输出之前收集的最大事件数,较大的批量大小通常更高效,但会增加内存开销。输出插件会将每个批处理作为一个输出单元。;例如,ES 输出会为收到的每个批次发出批量请求;调整 pipeline.batch.size 可调整发送到 ES 的批量请求(Bulk)的大小;
  • pipeline.batch.delay:设置 Logstash 管道的延迟时间, 管道批处理延迟是 Logstash 在当前管道工作线程中接收事件后等待新消息的最长时间(以毫秒为单位);简单来说,当 pipeline.batch.size 不满足时,会等待 pipeline.batch.delay 设置的时间,超时后便开始执行 filter 和 output 操作。

2、'reader' unacceptable character ' ' (0x0)

logstash 执行使用 Jdbc input plugin 后报错:

[main]-pipeline-manager] ERROR logstash.agent - Pipeline aborted due to error {
:exception=>#<Psych::SyntaxError: (): 'reader' unacceptable character ' ' (0x0) special characters are not allowed in "'reader'", 
position 0 at line 0 column 0>, :backtrace=>["org/jruby/ext/psych/PsychParser.java:232:in parse'"

解决方案:删除 $USER_HOME/.logstash_jdbc_last_run 文件即可。

二、Elasticsearch

1、TermsQuery 与多个 TermQuery 的区别

当 terms 的个数较少的时候,TermsQuery 等效为 ConstantScoreQuery 内部包含多个 TermQuery:

Query q1 = new TermInSetQuery(new Term("field", "foo"), new Term("field", "bar"));
// 等效为下面的语句
BooleanQuery bq = new BooleanQuery();
bq.add(new TermQuery(new Term("field", "foo")), Occur.SHOULD);
bq.add(new TermQuery(new Term("field", "bar")), Occur.SHOULD);
Query q2 = new ConstantScoreQuery(bq);

当 terms 较多的时候,它将使用匹配的文档组合成一个位集,并在该位集上进行评分;此时查询效率比普通的 Bool 合并要更加高效。

当 terms 的个数较多时,TermsQuery 比多个 TermQuery 组合的查询效率更高。

2、ES 借助 nginx 配置域名

upstream /data/ {
    server 192.168.187.xxx:9200;
    keepalive 300 ;
}

server {
    listen 80;
    server_name testelk.xx.com;
    keepalive_timeout 120s 120s;
    location /data {
        proxy_pass http://data/;
        proxy_http_version 1.1;
        proxy_set_header Connection "Keep-Alive";
        proxy_set_header Proxy-Connection "Keep-Alive";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass_header remote_user 
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
        proxy_set_header X-Nginx-Proxy true;
    }
}

3、ES Reindex 时如何不停止写入服务

方案一:kennywu76

ES 的 reindex 在索引有实时的 update/delete 的情况下,即使借助 alias,也没有办法实现真正的 zero down time。

增加新文档比较好办,通过 alias 切换写入到新索引,同时 reindex 做旧->新索引的数据传输即可;但是 update/delete 操作针对的文档如果还未从旧索引传输过来,直接对新索引操作会导致两个索引数据不一致。

我能够想到的(一个未经实际验证)的方案,前提是数据库里的文档有一个类似 last_update_time 字段记录文档最后更新的时间,用作写入 ES 文档的版本号,然后数据写入新索引的时候,url 里带上下面这样的参数:version_type=external_gt&version=xxxxxx

其中 version_type=external_gt 表示写入文档的版本号大于已有的文档版本号,或者文档不存在,写入才会成功,否则会抛版本冲突的异常。另外 delete 操作都要转换成 index 操作,index 的内容可以是一个空文档

这样实时数据写入新索引和 reindex 可以同时进行,实时写入的数据应该具有更高的版本,总是能够成功,reindex 如果遇到版本冲突,说明该文档被实时部分更新过了,已经过时,可以直接放弃跳过。

该方案的缺陷:

  • 要求数据源里的数据具有版本信息,可能因为各种局限,不太容易更改;
  • delete 操作必须转化为写入一个空文档,delete 实际上是一个标记文档,并且本身也有版本信息。但是如果后端发生了 segment merge,delete 可能会被合并以后物理清除。这样 delete 和对应的版本信息丢失,之后 reindex 如果写入了旧版本的文档,仍然会有一致性问题;但是空文档会增加索引文件的大小,有额外的消耗,一个可能的缓解办法是在 reindex 全部做完以后,再做一次空文档的删除。

改进方案:the_best

重建索引步骤如下:

  1. 保证 delete 操作都要转换成 index 操作,index 的内容可以是一个空文档;
  2. 对老索引 old_index(业务上的别名还是挂在老索引上)进行重索引操作(version_type=external);
    curl -X POST 'http://<hostname>:9200/_reindex'
    {
    "conflicts": "proceed",
    "source": {
        "index": "old_index",
        "size": 1000
    },
    "dest": {
        "index": "new_index",
        "version_type": "external"
    }
    }
  3. 将别名切到 newIndex;
  4. 将重索引时间段内 old_index 产生的热数据,再捞一次到 new_index 中(conflicts=proceed&version_type=external);
    curl -X POST /_reindex
    {
    "conflicts": "proceed",
    "source": {
        "index": "old_index"
        "query": {
            "constant_score" : {
                "filter" : {
                    "range" : {
                        "data_update_time" : {
                            "gte" : <reindex开始时刻前的毫秒时间戳>
                        }
                    }
                }
            }
        }
    },
    "dest": {
        "index": "new_index",
        "version_type": "external"
    }
    }
  5. 手动做一次空文档的删除。

这种方式取决于重索引期间产生的数据量大小(会影响步骤4的用时),不过我们可以视具体业务情况灵活操作。比如说数据量比较大重索引我们用了10个小时(这10个小时内新产生了200多万的数据),在切别名前,我们可以按步骤(4)的调用方式,把近10个小时的数据再捞一遍到新索引中,如此迭代个几次,直到别名切完后,我们能保证最后一次的步骤(4)可以在较短时间内完成。

4、ES 节点通讯配置

http.port: 9200
http.bind_host: 127.0.0.1
transport.tcp.port: 9300
transport.bind_host: 127.0.0.1

5、把 Lucene 的原生 query 传给 ES

SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.types(typeName);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.from(0);
sourceBuilder.size(10);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

//q为Lucene检索表达式, 直接输入关键词匹配_all或者*字段, 字段匹配user:kimchy, 
//多字段匹配user:kimchy AND message:Elasticsearch
QueryStringQueryBuilder queryStringQueryBuilder = QueryBuilders.queryStringQuery(q); 
sourceBuilder.query(queryStringQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest);
SearchHits searchHits = searchResponse.getHits();

6、ES 文档字段个数限制

ES 文档默认不允许文档字段超过 1000,超过 1000 会报如下错误:

failed to put mappings on indices [[[nfvoemspm/srjL3cMMRUqa7DgOrYqX-A]]], type [log]
java.lang.IllegalArgumentException: Limit of total fields [1000] in index [xxx] has been exceeded

可以通过修改索引配置来修改字段个数限制,不过还是推荐从业务上进行优化:

修改settings
{
  "index.mapping.total_fields.limit": 2000
}

7、将 DSL 字符串转换为 QueryBuilder

## wrapper 案例
GET /_search
{
    "query" : {
        "wrapper": {
            "query" : "eyJ0ZXJtIiA6IHsgInVzZXIiIDogIktpbWNoeSIgfX0=" 
        }
    }
}

## RestClient
QueryBuilders.wrapperQuery("{\"term\": {\"field\":\"value\"}}")

8、ES 集群重启后 Slice Scroll 速度变慢

重启机器之后,pagecache 都没有了,所有数据都要重新从磁盘加载。

9、ES 开启索引新建删除日志

PUT _cluster/settings
{
  "persistent": {
    "logger.cluster.service": "DEBUG"
  }
}

10、慢日志全局级别设定

  1. 对已经存在的索引可以通过 PUT _settings 做存量设置
  2. 对之后新增的索引,可以使用类似于下面的template
    PUT _template/global-slowlog_template
    {
    "order": -1,
    "version": 0,
    "template": "*",
    "settings": {
        "index.indexing.slowlog.threshold.index.debug" : "10ms",
        "index.indexing.slowlog.threshold.index.info" : "50ms",
        "index.indexing.slowlog.threshold.index.warn" : "100ms",
        "index.search.slowlog.threshold.fetch.debug" : "100ms",
        "index.search.slowlog.threshold.fetch.info" : "200ms",
        "index.search.slowlog.threshold.fetch.warn" : "500ms",
        "index.search.slowlog.threshold.query.debug" : "100ms",
        "index.search.slowlog.threshold.query.info" : "200ms",
        "index.search.slowlog.threshold.query.warn" : "1s"
    }
    }

11、TCP 设置多个端口的用途

transport.tcp.port 这个参数不写,默认为 9300-9399,开放那么多 端口有用么?

  • 如果设置一个端口,假设这个端口占用了程序就无法正常启动;
  • 如果设置多个端口,一个端口占用会寻找下一个端口,直至找到可用端口。

12、ES 临时重启,设置分片延迟分配策略

PUT _all/_settings
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "5m"
  }
}

三、Kibana

1、kibana 图表自定义标注

可以用 TSVB,支持标注。

Kibana TSVB 注解的使用:https://elasticsearch.cn/article/701

2、Kibana discover 导出 csv 文件

请参考文章:如何快速把 Kibana Discover 页的 Document Table 导出成 CSV

3、修改 kibana 的默认主页

https://elasticsearch.cn/article/6335

四、社区文章精选


Any Code,Code Any!

扫码关注『AnyCode』,编程路上,一起前行。

继续阅读 »

ELK Tips 主要介绍一些 ELK 使用过程中的小技巧,内容主要来源为 Elastic 中文社区。

一、Logstash

1、Logstash 性能调优主要参数

  • pipeline.workers:设置启动多少个线程执行 fliter 和 output;当 input 的内容出现堆积而 CPU 使用率还比较充足时,可以考虑增加该参数的大小;
  • pipeline.batch.size:设置单个工作线程在执行过滤器和输出之前收集的最大事件数,较大的批量大小通常更高效,但会增加内存开销。输出插件会将每个批处理作为一个输出单元。;例如,ES 输出会为收到的每个批次发出批量请求;调整 pipeline.batch.size 可调整发送到 ES 的批量请求(Bulk)的大小;
  • pipeline.batch.delay:设置 Logstash 管道的延迟时间, 管道批处理延迟是 Logstash 在当前管道工作线程中接收事件后等待新消息的最长时间(以毫秒为单位);简单来说,当 pipeline.batch.size 不满足时,会等待 pipeline.batch.delay 设置的时间,超时后便开始执行 filter 和 output 操作。

2、'reader' unacceptable character ' ' (0x0)

logstash 执行使用 Jdbc input plugin 后报错:

[main]-pipeline-manager] ERROR logstash.agent - Pipeline aborted due to error {
:exception=>#<Psych::SyntaxError: (): 'reader' unacceptable character ' ' (0x0) special characters are not allowed in "'reader'", 
position 0 at line 0 column 0>, :backtrace=>["org/jruby/ext/psych/PsychParser.java:232:in parse'"

解决方案:删除 $USER_HOME/.logstash_jdbc_last_run 文件即可。

二、Elasticsearch

1、TermsQuery 与多个 TermQuery 的区别

当 terms 的个数较少的时候,TermsQuery 等效为 ConstantScoreQuery 内部包含多个 TermQuery:

Query q1 = new TermInSetQuery(new Term("field", "foo"), new Term("field", "bar"));
// 等效为下面的语句
BooleanQuery bq = new BooleanQuery();
bq.add(new TermQuery(new Term("field", "foo")), Occur.SHOULD);
bq.add(new TermQuery(new Term("field", "bar")), Occur.SHOULD);
Query q2 = new ConstantScoreQuery(bq);

当 terms 较多的时候,它将使用匹配的文档组合成一个位集,并在该位集上进行评分;此时查询效率比普通的 Bool 合并要更加高效。

当 terms 的个数较多时,TermsQuery 比多个 TermQuery 组合的查询效率更高。

2、ES 借助 nginx 配置域名

upstream /data/ {
    server 192.168.187.xxx:9200;
    keepalive 300 ;
}

server {
    listen 80;
    server_name testelk.xx.com;
    keepalive_timeout 120s 120s;
    location /data {
        proxy_pass http://data/;
        proxy_http_version 1.1;
        proxy_set_header Connection "Keep-Alive";
        proxy_set_header Proxy-Connection "Keep-Alive";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass_header remote_user 
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
        proxy_set_header X-Nginx-Proxy true;
    }
}

3、ES Reindex 时如何不停止写入服务

方案一:kennywu76

ES 的 reindex 在索引有实时的 update/delete 的情况下,即使借助 alias,也没有办法实现真正的 zero down time。

增加新文档比较好办,通过 alias 切换写入到新索引,同时 reindex 做旧->新索引的数据传输即可;但是 update/delete 操作针对的文档如果还未从旧索引传输过来,直接对新索引操作会导致两个索引数据不一致。

我能够想到的(一个未经实际验证)的方案,前提是数据库里的文档有一个类似 last_update_time 字段记录文档最后更新的时间,用作写入 ES 文档的版本号,然后数据写入新索引的时候,url 里带上下面这样的参数:version_type=external_gt&version=xxxxxx

其中 version_type=external_gt 表示写入文档的版本号大于已有的文档版本号,或者文档不存在,写入才会成功,否则会抛版本冲突的异常。另外 delete 操作都要转换成 index 操作,index 的内容可以是一个空文档

这样实时数据写入新索引和 reindex 可以同时进行,实时写入的数据应该具有更高的版本,总是能够成功,reindex 如果遇到版本冲突,说明该文档被实时部分更新过了,已经过时,可以直接放弃跳过。

该方案的缺陷:

  • 要求数据源里的数据具有版本信息,可能因为各种局限,不太容易更改;
  • delete 操作必须转化为写入一个空文档,delete 实际上是一个标记文档,并且本身也有版本信息。但是如果后端发生了 segment merge,delete 可能会被合并以后物理清除。这样 delete 和对应的版本信息丢失,之后 reindex 如果写入了旧版本的文档,仍然会有一致性问题;但是空文档会增加索引文件的大小,有额外的消耗,一个可能的缓解办法是在 reindex 全部做完以后,再做一次空文档的删除。

改进方案:the_best

重建索引步骤如下:

  1. 保证 delete 操作都要转换成 index 操作,index 的内容可以是一个空文档;
  2. 对老索引 old_index(业务上的别名还是挂在老索引上)进行重索引操作(version_type=external);
    curl -X POST 'http://<hostname>:9200/_reindex'
    {
    "conflicts": "proceed",
    "source": {
        "index": "old_index",
        "size": 1000
    },
    "dest": {
        "index": "new_index",
        "version_type": "external"
    }
    }
  3. 将别名切到 newIndex;
  4. 将重索引时间段内 old_index 产生的热数据,再捞一次到 new_index 中(conflicts=proceed&version_type=external);
    curl -X POST /_reindex
    {
    "conflicts": "proceed",
    "source": {
        "index": "old_index"
        "query": {
            "constant_score" : {
                "filter" : {
                    "range" : {
                        "data_update_time" : {
                            "gte" : <reindex开始时刻前的毫秒时间戳>
                        }
                    }
                }
            }
        }
    },
    "dest": {
        "index": "new_index",
        "version_type": "external"
    }
    }
  5. 手动做一次空文档的删除。

这种方式取决于重索引期间产生的数据量大小(会影响步骤4的用时),不过我们可以视具体业务情况灵活操作。比如说数据量比较大重索引我们用了10个小时(这10个小时内新产生了200多万的数据),在切别名前,我们可以按步骤(4)的调用方式,把近10个小时的数据再捞一遍到新索引中,如此迭代个几次,直到别名切完后,我们能保证最后一次的步骤(4)可以在较短时间内完成。

4、ES 节点通讯配置

http.port: 9200
http.bind_host: 127.0.0.1
transport.tcp.port: 9300
transport.bind_host: 127.0.0.1

5、把 Lucene 的原生 query 传给 ES

SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.types(typeName);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.from(0);
sourceBuilder.size(10);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

//q为Lucene检索表达式, 直接输入关键词匹配_all或者*字段, 字段匹配user:kimchy, 
//多字段匹配user:kimchy AND message:Elasticsearch
QueryStringQueryBuilder queryStringQueryBuilder = QueryBuilders.queryStringQuery(q); 
sourceBuilder.query(queryStringQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest);
SearchHits searchHits = searchResponse.getHits();

6、ES 文档字段个数限制

ES 文档默认不允许文档字段超过 1000,超过 1000 会报如下错误:

failed to put mappings on indices [[[nfvoemspm/srjL3cMMRUqa7DgOrYqX-A]]], type [log]
java.lang.IllegalArgumentException: Limit of total fields [1000] in index [xxx] has been exceeded

可以通过修改索引配置来修改字段个数限制,不过还是推荐从业务上进行优化:

修改settings
{
  "index.mapping.total_fields.limit": 2000
}

7、将 DSL 字符串转换为 QueryBuilder

## wrapper 案例
GET /_search
{
    "query" : {
        "wrapper": {
            "query" : "eyJ0ZXJtIiA6IHsgInVzZXIiIDogIktpbWNoeSIgfX0=" 
        }
    }
}

## RestClient
QueryBuilders.wrapperQuery("{\"term\": {\"field\":\"value\"}}")

8、ES 集群重启后 Slice Scroll 速度变慢

重启机器之后,pagecache 都没有了,所有数据都要重新从磁盘加载。

9、ES 开启索引新建删除日志

PUT _cluster/settings
{
  "persistent": {
    "logger.cluster.service": "DEBUG"
  }
}

10、慢日志全局级别设定

  1. 对已经存在的索引可以通过 PUT _settings 做存量设置
  2. 对之后新增的索引,可以使用类似于下面的template
    PUT _template/global-slowlog_template
    {
    "order": -1,
    "version": 0,
    "template": "*",
    "settings": {
        "index.indexing.slowlog.threshold.index.debug" : "10ms",
        "index.indexing.slowlog.threshold.index.info" : "50ms",
        "index.indexing.slowlog.threshold.index.warn" : "100ms",
        "index.search.slowlog.threshold.fetch.debug" : "100ms",
        "index.search.slowlog.threshold.fetch.info" : "200ms",
        "index.search.slowlog.threshold.fetch.warn" : "500ms",
        "index.search.slowlog.threshold.query.debug" : "100ms",
        "index.search.slowlog.threshold.query.info" : "200ms",
        "index.search.slowlog.threshold.query.warn" : "1s"
    }
    }

11、TCP 设置多个端口的用途

transport.tcp.port 这个参数不写,默认为 9300-9399,开放那么多 端口有用么?

  • 如果设置一个端口,假设这个端口占用了程序就无法正常启动;
  • 如果设置多个端口,一个端口占用会寻找下一个端口,直至找到可用端口。

12、ES 临时重启,设置分片延迟分配策略

PUT _all/_settings
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "5m"
  }
}

三、Kibana

1、kibana 图表自定义标注

可以用 TSVB,支持标注。

Kibana TSVB 注解的使用:https://elasticsearch.cn/article/701

2、Kibana discover 导出 csv 文件

请参考文章:如何快速把 Kibana Discover 页的 Document Table 导出成 CSV

3、修改 kibana 的默认主页

https://elasticsearch.cn/article/6335

四、社区文章精选


Any Code,Code Any!

扫码关注『AnyCode』,编程路上,一起前行。

收起阅读 »

Elastic日报 第534期(2019-2-22)

1、Canvas 用户场景示例
http://t.cn/ELp5dHT
2、手把手教你如何使用 IDEA 来调试 Elasticsearch 源码
http://t.cn/EVlXszN
3、关于ElasticSearch并不那么明显的6个事情(自备梯子)
http://t.cn/EVwtn1R

编辑:铭毅天下
归档:https://elasticsearch.cn/article/6394
订阅:https://tinyletter.com/elastic-daily
继续阅读 »
1、Canvas 用户场景示例
http://t.cn/ELp5dHT
2、手把手教你如何使用 IDEA 来调试 Elasticsearch 源码
http://t.cn/EVlXszN
3、关于ElasticSearch并不那么明显的6个事情(自备梯子)
http://t.cn/EVwtn1R

编辑:铭毅天下
归档:https://elasticsearch.cn/article/6394
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

Elastic日报 第533期 (2019-02-21)

1.如何构建实时全文检索引擎
http://t.cn/EVD0sgm
2.elasticsearch深入--地理位置
http://t.cn/EVe00vL
3.Elasticsearch Painless 脚本语言入门
http://t.cn/EVevxBw

编辑:金桥
归档:https://elasticsearch.cn/article/6363
订阅:https://tinyletter.com/elastic-daily
继续阅读 »
1.如何构建实时全文检索引擎
http://t.cn/EVD0sgm
2.elasticsearch深入--地理位置
http://t.cn/EVe00vL
3.Elasticsearch Painless 脚本语言入门
http://t.cn/EVevxBw

编辑:金桥
归档:https://elasticsearch.cn/article/6363
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

Elastic日报 第532期 (2019-02-20)

1.有限状态机与 Lucene 的那些事
http://t.cn/EVmHHhp
2.HBase 2.0 协处理器实现 Elasticsearch 数据同步
http://t.cn/EVmHg8V
3.Elasticsearch 官方 Go client
http://t.cn/RlyFLzy
 
编辑:江水
归档:https://elasticsearch.cn/article/6362
订阅:https://tinyletter.com/elastic-daily
继续阅读 »
1.有限状态机与 Lucene 的那些事
http://t.cn/EVmHHhp
2.HBase 2.0 协处理器实现 Elasticsearch 数据同步
http://t.cn/EVmHg8V
3.Elasticsearch 官方 Go client
http://t.cn/RlyFLzy
 
编辑:江水
归档:https://elasticsearch.cn/article/6362
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

Elastic日报 第531期 (2019-02-19)

1、(自备梯子)如何使用Elasticsearch,Logstash和Kibana实时显示Python中的日志。
http://t.cn/EtnXpxL
2、Elasticsearch自动补全实践。
http://t.cn/EVl8L8O
​3、如何为旧应用集成ElasticSearch。
http://t.cn/EVl8ItS

编辑:叮咚光军
归档:https://elasticsearch.cn/article/6361
订阅:https://tinyletter.com/elastic-daily
继续阅读 »
1、(自备梯子)如何使用Elasticsearch,Logstash和Kibana实时显示Python中的日志。
http://t.cn/EtnXpxL
2、Elasticsearch自动补全实践。
http://t.cn/EVl8L8O
​3、如何为旧应用集成ElasticSearch。
http://t.cn/EVl8ItS

编辑:叮咚光军
归档:https://elasticsearch.cn/article/6361
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

Elastic日报 第530期 (2019-02-18)

1.Elasticsearch 6.3 SQL功能使用案例分享
http://t.cn/EVCAAgJ
2.23个最有用的Elasticsearch检索技巧
http://t.cn/EVC20yd
3.在kibana V6.5.1上开发认证插件的踩坑记录
http://t.cn/EVCyNFH

编辑:cyberdak
归档:https://elasticsearch.cn/article/6360
订阅:https://tinyletter.com/elastic-daily
继续阅读 »
1.Elasticsearch 6.3 SQL功能使用案例分享
http://t.cn/EVCAAgJ
2.23个最有用的Elasticsearch检索技巧
http://t.cn/EVC20yd
3.在kibana V6.5.1上开发认证插件的踩坑记录
http://t.cn/EVCyNFH

编辑:cyberdak
归档:https://elasticsearch.cn/article/6360
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

【同花顺招聘】AI事业部搜索项目负责人/技术专家/产品总监 30-60K

【公司介绍】
同花顺成立于1995年,国内第一家互联网金融信息服务行业上市公司。目前拥有 3000 多个员工,主要
业务包括四大部分:网上行情交易系统,移动金融信息服务,基金销售,金融大数据处理及云服务等,另
外还有目前大力发展的 AI 项目(问财事业部:智能投顾,智能外呼等业务),欢迎大家加入我们~ 
搜索项目负责人
【岗位职责】
1、负责搜索整体领域架构设计,结合业务领域分析梳理搜索领域解决方案,设计全局搜索整体领域架构,支撑业务场景应用;
2、负责搜索领域生态架构设计:构建搜索领域体系架构设计,含控制架构、数据架构、接口及工具链的系统架构设计;
3、负责搜索领域竞争力演进,架构演进路标规划及架构看护:分析行业动态,并制定架构演进路标,按路标完成架构目标落地,及架构演进看护。
【岗位要求】
1、主持或者参与过业界搜索引擎产品设计;
2、熟悉搜索领域关键技术,精通搜索引擎架构原理、排序算法、索引处理、分词算法和索引数据结构等搜索引擎核心技术;
3、精通ElasticSearch、Lucene、Solr等搜索基础框架,有大中型互联网垂直搜索引擎系统开发经验,或者全站搜索引擎的优先;
4、具备深厚的特性方法和架构设计方法论,高级领域建模、需求建模能力,以及成功的领域设计经验。
 
【我们的福利】
AI领域的全面发展,已经取得部分成效;
30人搜索团队规模,行业前沿的技术研发;
Boss的大力支持,看你想怎么做;
美女多,薪资高,欢迎你来撩~
请联系小姐姐:陈 18810574062(同微信)
 
 
 
继续阅读 »
【公司介绍】
同花顺成立于1995年,国内第一家互联网金融信息服务行业上市公司。目前拥有 3000 多个员工,主要
业务包括四大部分:网上行情交易系统,移动金融信息服务,基金销售,金融大数据处理及云服务等,另
外还有目前大力发展的 AI 项目(问财事业部:智能投顾,智能外呼等业务),欢迎大家加入我们~ 
搜索项目负责人
【岗位职责】
1、负责搜索整体领域架构设计,结合业务领域分析梳理搜索领域解决方案,设计全局搜索整体领域架构,支撑业务场景应用;
2、负责搜索领域生态架构设计:构建搜索领域体系架构设计,含控制架构、数据架构、接口及工具链的系统架构设计;
3、负责搜索领域竞争力演进,架构演进路标规划及架构看护:分析行业动态,并制定架构演进路标,按路标完成架构目标落地,及架构演进看护。
【岗位要求】
1、主持或者参与过业界搜索引擎产品设计;
2、熟悉搜索领域关键技术,精通搜索引擎架构原理、排序算法、索引处理、分词算法和索引数据结构等搜索引擎核心技术;
3、精通ElasticSearch、Lucene、Solr等搜索基础框架,有大中型互联网垂直搜索引擎系统开发经验,或者全站搜索引擎的优先;
4、具备深厚的特性方法和架构设计方法论,高级领域建模、需求建模能力,以及成功的领域设计经验。
 
【我们的福利】
AI领域的全面发展,已经取得部分成效;
30人搜索团队规模,行业前沿的技术研发;
Boss的大力支持,看你想怎么做;
美女多,薪资高,欢迎你来撩~
请联系小姐姐:陈 18810574062(同微信)
 
 
  收起阅读 »