在 Mapping 里面,将 dynamic 参数设置成 strict 可以拒绝索引包含未知字段的文档。 此条 Tips 由 medcl 贡献。

【 报名开启】2018 Elastic & 袋鼠云 & 阿里云技术沙龙(杭州)

ElasticsearchAllwang 发表了文章 • 1 个评论 • 3339 次浏览 • 2018-12-02 20:40 • 来自相关话题

互联网时代,十亿、百亿、千亿的数据日志呈井喷式增长,基于日志搜索分析的需求也越来越强烈。Elasticsearch 作为一个分布式、可扩展、实时的搜索与数据分析引擎, 在大体量的数据处理上,无论实在全文搜索,还是在结构化数据统计中,都有非常大的优势。然而在真正实践过程中海量数据如何高效采集,如何合理优化分配索引,如何规划集群,如何满足业务分析需求都是我们可能会面临的问题。

本次袋鼠云联合阿里云、Elastic 中文社区,共同邀请滴滴、有赞等行业技术专家一同分享和探讨各自领域Elastic的实践。
 
本次活动时间12月15日 周六人数限制100人,大家抓紧报名哈,报名链接https://meetup.elasticsearch.c ... .html

参与线下互动还有机会获得技术书籍与精美礼品哦!!!
不出意外,这应该是2018年Elastic在杭州的最后一次沙龙,小伙伴们抓紧今年的尾巴,不放过任何学习的机会哦!!!

Day 2 - ES 6.x拼音分词高亮爬坑记

Adventabia 发表了文章 • 10 个评论 • 9994 次浏览 • 2018-12-02 16:29 • 来自相关话题

大家好,我是来自尚德机构ES平台的负责人,白凡,今天为大家分享一些在6.x版本中拼音分词高亮问题爬坑的心路历程~,其实问题不复杂,主要介绍下思路。

首先简单讲下背景~可能在很多公司的很多部门,都有使用到ES。包括在尚德,由于很多部门的业务都涉及到ES,于是我们为了统一管理及维护,专门成立了ES平台部门,主要扮演的是类似于op dba角色,帮助业务部门部署维护ES集群,并根据业务需求提供解决方案。当然,除此之外,我们也会在公司内部推荐业务方去尝试除了日志和搜索以外的应用场景,比如分布式计算存储、监控、安全等方面。毕竟ES相比于其他组建,搭建部署更加方便,更轻量级,查询方式更丰富。所以,现如今在尚德机构,ES平台不仅用于了传统的日志和搜索领域,也在分布式数据存储和计算方面有很多应用。当然,这里只是为大家提供一些ES应用场景及其团队构建的思路。主要还是ES这个工具确实好用。

广告先做到这,回到正文。所以,前段日子,我们接收了一个新的业务部门需求,大致是:他们之前使用的自己搭建ES 2.x集群,现在接入到我们6.x的平台上来。我们帮忙设计了mapping,数据写入及同步方案之后,数据就慢慢接入进来。但问题也随即出现,原来在2.x上使用正常的拼音高亮mapping,在6.x上只能检索但无法高亮了?

2.x field如下:
"index" : {
"analysis" : {
"analyzer" : {
"pinyin_analyzer" : {
"tokenizer" : "my_pinyin"
}
},
"tokenizer" : {
"my_pinyin" : {
"type" : "pinyin",
"keep_full_pinyin" : false,
"limit_first_letter_length" : 16,
"lowercase" : true,
"remove_duplicated_term":true,
"keep_first_letter":true,
"keep_separate_first_letter" :true
}
}
}
}
POST /medcl/doc/_mapping
{
"properties": {
"name":{
"analyzer": "pinyin_analyzer",
"type": "string"
}
}
}

可以从上面例子看出,这个analyzer并没有问题,但是在搜索时,能得到结果,却无法高亮,即分词结果中start_offset及end_offset为0,这个如何解决呢?

回到medcl的拼音分词项目:
https://github.com/medcl/elast ... inyin
其中,有个配置项引起了我们的注意:

图片1.png


没跑了,应该是要将这个参数设置为false。
并且查看了源码,在PinyinTokenizer这个类下面,看到了这一行:

图片2.png


确定了我们的思路,于是乎,在tokenizer中将此参数设为false,如下:
"tokenizer" : {
"my_pinyin" : {
"type" : "pinyin",
"keep_full_pinyin" : true,
"keep_original" : false,
"limit_first_letter_length" : 16,
"lowercase" : true,
"remove_duplicated_term":true,
"ignore_pinyin_offset": false,
"keep_first_letter":true,
"keep_separate_first_letter" :true
}
}

写入一条数据,高亮没问题了,问题“看似”解决了。
当然,没有那么简单。因为在批量写入一部分数据后,总会报如下异常:
startOffset must be non-negative, and endOffset must be >= startOffset
这个异常,导致数据无法写入集群。
这里又是为什么呢?
这个问题,我也搞了一段时间,始终没找到很好的解决方案,此处只能先@medcl。
只是猜测在end()或者reset()方法内,需要lastOffset置0或者offsetAtt清空。但尝试了几次,依然报错。。。

这就比较头疼了,不过好在条条道路通罗马。在某次蹲坑过程中,灵感如尿崩。

如果Tokenizer解决不了,为何不仅用filter就行了呢?可以先用其他分词器,按我们业务的需求进行分词,再用filter,将分词过滤为拼音呢?

大致思路如下:
目前我们这个业务,需要如对于“尚德机构”这个词,搜索“shang”,“shangde”,“deji”时,能返回结果并高亮。
所以我们先用ngram分词,将“尚德机构”这个词分为“尚”,“尚德”,“徳机”,“德机构”等等。。
再用pinyin filter将各分词过滤为拼音,即“shang”,“shangde”,“deji”等。
并在搜索时,采用standard分词。
Mapping如下:
{
"settings": {
"analysis": {
"analyzer": {
"pinyin_analyzer": {
"tokenizer": "my_ngram",
"filter": [
"pinyin_filter"
]
}
},
"tokenizer": {
"my_ngram": {
"type": "ngram",
"min_gram": 1,
"max_gram": 50,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
"filter": {
"pinyin_filter": {
"type": "pinyin",
"keep_full_pinyin": false,
"keep_joined_full_pinyin": true,
"keep_none_chinese_in_joined_full_pinyin": true,
"none_chinese_pinyin_tokenize": false,
"remove_duplicated_term": true
}
}
}
},
"mappings": {
"abia321": {
"properties": {
"name": {
"type": "text",
"analyzer": "pinyin_analyzer",
"search_analyzer": "standard",
"term_vector": "with_positions_offsets"
}
}
}
}
}
最后,高亮问题解决,数据写入问题同样解决。
当然有朋友肯定还会需要搜索拼音首字母进行搜索,如搜“s”,“sd”,“dj”,也返回结果。
其实,只需要再专门设置个field,并调整pinyin filter参数,
搜索时用bool查询,逻辑should查询,同时对完整拼音field和拼音首字母field进行搜索即可。
在此就不做过多赘述。

当然,这里仅仅只是提供一种ES在选择analyzer,tokenizer,filter解决需求的思路。拼音分词这个问题,还是需要等待后续修复

最后,这里有较为完整的issue:
https://github.com/medcl/elast ... s/169

社区日报 第466期 (2018-12-02)

社区日报至尊宝 发表了文章 • 0 个评论 • 2258 次浏览 • 2018-12-02 09:26 • 来自相关话题

1.NoSQL vs SQL:有什么区别以及如何选择。
http://t.cn/ELDJY7y
2.什么是软件工程中的管道? Deployment,CI和CD管道简介。
http://t.cn/ELDcM82
3.(自备梯子)现在是时候认真对待Regulating Tech了。
http://t.cn/ELOozoo

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

社区日报 第465期 (2018-12-01)

社区日报bsll 发表了文章 • 0 个评论 • 1609 次浏览 • 2018-12-01 10:40 • 来自相关话题

  1. 适用于ES 6.0之后的Field Stats插件。
    [http://t.cn/ELmZMFl](http://t.cn/ELmZMFl) 

  2. 你知道ICU分析器支持emoji表情了吗?。
    [http://t.cn/ELmw4aF](http://t.cn/ELmw4aF) 

  3. Canvas中数据表和调试元素的使用示例。
    [http://t.cn/ELmX7Tc](http://t.cn/ELmX7Tc) 


Day 1 - ELK 使用小技巧(第 3 期)

Adventrochy 发表了文章 • 1 个评论 • 5327 次浏览 • 2018-12-01 02:28 • 来自相关话题

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

一、Logstash

1、Filebeat 设置多个 output

在 6.0 之前,Filebeat 可以设置多个输出(必须是不同类型的输出);从 6.0 开始已经禁止多输出了,只能拥有一个输出,如果想实现多输出,可以借助 logstash 等中间组件进行输出分发。


二、Elasticsearch

1、ES 用户占用的内存大于为 ES 设置的 heapsize

ES 是 Java 应用,底层存储引擎是基于 Lucene 的,heapsize 设置的是 Java 应用的内存;而 Lucene 建立倒排索引(Inverted Index)是先在内存里生成,然后定期以段文件(segment file)的形式刷到磁盘的,因此 Lucene 也会占用一部分内存。

https://elasticsearch.cn/article/32

2、ES 使用别名插入数据

ES 可以通过索引的方式向索引插入数据,但是同时只能有一个索引可以被写入,而且需要手动设置,未设置的情况下会报错:no write index is defined for alias [xxxx], The write index may be explicitly disabled using is_write_index=false or the alias points to multiple indices without one being designated as a write index。
<br /> POST /_aliases<br /> {<br /> "actions" : [<br /> {<br /> "add" : {<br /> "index" : "test",<br /> "alias" : "alias1",<br /> "is_write_index" : true<br /> }<br /> }<br /> ]<br /> }<br />

3、ES 设置 G1 垃圾回收

修改 jvm.options文件,将下面几行:
<br /> -XX:+UseConcMarkSweepGC<br /> -XX:CMSInitiatingOccupancyFraction=75<br /> -XX:+UseCMSInitiatingOccupancyOnly<br />
改为
<br /> -XX:+UseG1GC<br /> -XX:MaxGCPauseMillis=50<br />
即可。

其中 -XX:MaxGCPauseMillis 是控制预期的最高 GC 时长,默认值为 200ms,如果线上业务特性对于 GC 停顿非常敏感,可以适当设置低一些。但是这个值如果设置过小,可能会带来比较高的 cpu 消耗。

4、ES 和 Zipkin 集成时设置验证信息

<br /> java -DKAFKA_ZOOKEEPER=10.14.123.117:2181 <br /> -DSTORAGE_TYPE=elasticsearch <br /> -DES_HOSTS=http://10.14.125.5:9200 <br /> ES_USERNAME=xxx ES_PASSWORD=xxx <br /> -jar zipkin.jar<br />

5、ES 集群部署报错

问题 1 报错信息如下:
<br /> Received message from unsupported version:[2.0.0] minimal compatible version is:[5.6.0]<br />
经排查是集群中存在低版本的 ES 实例,将低版本实例移除即可。

问题 2 报错信息如下:
<br /> with the same id but is a different node instance<br />
删除对应节点 elsticsearch 文件夹下的 data 文件夹下的节点数据即可。

6、海量中文分词插件

海量分词是天津海量信息技术股份有限公司自主研发的中文分词核心,经测试分词效果还是不错的,值得一试。

https://github.com/HylandaOpen ... hlseg

7、查询一个索引下的所有 type 名

通过下面的 API,即可获取全部的 type,下面的例子中 doc 就是 indexName 索引下的一个 type:
<br /> GET <a href="http://es127.0.0.1:9200/indexName/_mappings" rel="nofollow" target="_blank">http://es127.0.0.1:9200/indexName/_mappings</a><br /> -----------------------------------------------<br /> {<br /> indexName: - {<br /> mappings: - {<br /> doc: - {<br /> _all: + {... },<br /> dynamic_date_formats: + [... ],<br /> dynamic_templates: + [... ],<br /> properties: + {... }<br /> }<br /> }<br /> }<br /> }<br />

8、索引模板中根据字段值设置别名

设置索引模板的时候,别名可以使用 Query 条件来进行匹配。
<br /> PUT _template/template_1<br /> {<br /> "index_patterns" : ["te*"],<br /> "settings" : {<br /> "number_of_shards" : 1<br /> },<br /> "aliases" : {<br /> "alias2" : {<br /> "filter" : {<br /> "term" : {"user" : "kimchy" }<br /> },<br /> "routing" : "kimchy"<br /> },<br /> "{index}-alias" : {} <br /> }<br /> }<br />

9、索引模板设置默认时间匹配格式

ES 默认是不会将 yyyy-MM-dd HH:mm:ss 识别为时间的,可以通过在索引模板进行如下设置实现多种时间格式的识别:
<br /> "mappings": {<br /> "doc": {<br /> "dynamic_date_formats": ["yyyy-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis"],<br />

10、ES 中 Merge 相关设置

Merge 是非常耗费 CPU 的操作;而且如果不是 SSD 的话,推荐将 index.merge.scheduler.max_thread_count 设置为 1;否则 ES 会启动 Math.min(3, Runtime.getRuntime().availableProcessors() / 2) 个线程进行 Merge 操作;这样大部分机械硬盘的磁盘 IO 都很难承受,就可能出现阻塞。
<br /> "index": {<br /> "refresh_interval": "5s",<br /> "number_of_shards": "3",<br /> "max_result_window": 10000,<br /> "translog": {<br /> "flush_threshold_size": "500mb",<br /> "sync_interval": "30s",<br /> "durability": "async"<br /> },<br /> "merge": {<br /> "scheduler": {<br /> "max_merge_count": "100",<br /> "max_thread_count": "1"<br /> }<br /> },<br />

11、mapping 中 enabled store index 参数

  • enabled:默认是true,只用于 mapping 中的 object 字段类型;当设置为 false 时,其作用是使 es 不去解析该字段,并且该字段不能被查询和 store,只有在 source 中才能看到,设置 enabled 为 false,可以不设置字段类型,默认类型为 object;
  • store:默认 false,store 参数的功能和 source 有一些相似,我们的数据默认都会在 source 中存在,但我们也可以将数据 store 起来;当我们使用 copy_to 参数时,copy_to 的目标字段并不会在 source 中存储,此时 store 就派上用场了;
  • index:默认是 true,当设置为 false,表明该字段不能被查询,如果查询会报错。

    12、ES 图片搜索

  • 可以借助局部敏感 LSH 或者 pHash 来实现:https://stackoverflow.com/questions/32785803
  • Github 也有一个开源项目使用了多种 Hash 算法借助 ES 来实现图片搜索:https://github.com/usc-isi-i2/ ... tures

    13、Term 聚合根据子聚合结果排序

    <br /> GET /_search<br /> {<br /> "aggs" : {<br /> "genres" : {<br /> "terms" : {<br /> "field" : "genre",<br /> "order" : { "playback_stats.max" : "desc" }<br /> },<br /> "aggs" : {<br /> "playback_stats" : { "stats" : { "field" : "play_count" } }<br /> }<br /> }<br /> }<br /> }<br />

    三、社区文章精选

  • [ET007 ElasticStack 6.5 介绍](https://elasticsearch.cn/article/6144)
  • [CentOS 7.4 下安装 ES 6.5.1 搜索集群](https://elasticsearch.cn/article/6152)
  • [Elastic Stack v6.5 新特性解读](https://elasticsearch.cn/article/6156)
  • [Elasticsearch 史上最全最常用工具清单](https://mp.weixin.qq.com/s/s2ema4tIXKcqTNUUhjGt1w)

logstash同步父子关系到ElasticSearch报错,求教

Logstashlaoyang360 回复了问题 • 3 人关注 • 1 个回复 • 3143 次浏览 • 2018-12-01 21:48 • 来自相关话题

一样的数据,为什么logstash2.4.0会解析部分json数据失败

回复

Logstashsong19850712 发起了问题 • 1 人关注 • 0 个回复 • 2180 次浏览 • 2018-11-30 15:52 • 来自相关话题

logstash snmp

Logstashhanj 回复了问题 • 4 人关注 • 2 个回复 • 3393 次浏览 • 2019-08-13 16:52 • 来自相关话题

当前模块依赖es6.3.2,但是依赖当前模块的项目展示 依赖es2.4.4,项目中并未引入es2.4.4

回复

Elasticsearchandyvera 发起了问题 • 1 人关注 • 0 个回复 • 1713 次浏览 • 2018-11-30 13:57 • 来自相关话题

为什么elasticsearch写入比读取还要快?

ElasticsearchLoading Zhang 回复了问题 • 3 人关注 • 2 个回复 • 1737 次浏览 • 2018-12-01 12:19 • 来自相关话题

社区日报 第464期 (2018-11-30)

社区日报laoyang360 发表了文章 • 0 个评论 • 1512 次浏览 • 2018-11-30 12:37 • 来自相关话题

1、python实现MongoDB数据同步到ES
http://t.cn/ELYKOXo
2、Elasticsearch搜索引擎性能调优实践
http://t.cn/ELRuqLN
3、全文检索ElasticSearch与Spring boot集成实例
http://t.cn/ELRuKal

编辑:铭毅天下
归档:https://elasticsearch.cn/article/6162
订阅:https://tinyletter.com/elastic-daily
 

es传输json数据出现的问题

Elasticsearchrochy 回复了问题 • 2 人关注 • 1 个回复 • 1584 次浏览 • 2018-11-30 15:58 • 来自相关话题

logstash 输入插件syslog中为啥不能配置host

Logstashmedcl 回复了问题 • 3 人关注 • 2 个回复 • 3312 次浏览 • 2018-12-08 21:40 • 来自相关话题

kibana分析nginx日志,还在纠结用filebeat还是logstash

Kibanasa_linux 回复了问题 • 6 人关注 • 5 个回复 • 10363 次浏览 • 2019-04-01 17:47 • 来自相关话题

单次查询时间几十ms,并发数提高的情况下,查询速度如何提升

Elasticsearchliubin 回复了问题 • 3 人关注 • 2 个回复 • 8075 次浏览 • 2018-11-30 17:48 • 来自相关话题