
社区日报 第314期 (2018-06-26)
http://t.cn/RrMM9zJ
2.优化搜索引擎相关性的一些方案。
http://t.cn/RrMMjmj
3.(自备翻墙)使用Elasticsearch构建一个真实应用。
http://t.cn/RrMMpdf
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:叮咚光军
归档:https://elasticsearch.cn/article/684
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RrMM9zJ
2.优化搜索引擎相关性的一些方案。
http://t.cn/RrMMjmj
3.(自备翻墙)使用Elasticsearch构建一个真实应用。
http://t.cn/RrMMpdf
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:叮咚光军
归档:https://elasticsearch.cn/article/684
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

【线下活动】【袋鼠云技术团队】2018-06-30-杭州-Devops运维沙龙
活动简介:
互联网时代,创新、高效、速度是企业保持核心竞争力的必要条件。DevOps被描述为“开发团队与运营团队之间更具协作性、更高效的关系”。本次活动邀请到阿里云Docker团队,ES团队、袋鼠云日志团队的同学从各个方面向大家介绍Devops的实践经验,帮助企业更敏捷、更自动化、更高效地实现持续交付。
主办方:袋鼠云
特别支持:养码场、高效运维社区、DBAPLUS、Elastic中文社区、阿里云、跨星、杭州创业大街
报名平台:活动行
直播支持:IT大咖说
活动时间:2018年6月30日13:00-17:00
活动地点:杭州市滨江区阡陌路459号聚光中心内 杭州创业大街C1-105室跨星空间
分享嘉宾:
赵汉青 阿里巴巴集团搜索事业部 高级工程师
Elasticsearch运维实践分享
简介:2014年硕士毕业于中国科学技术大学 曾就职于思科系统(中国)研发有限公司云服务部,本次主题针对Elasticsearch集群运维:监控,诊断,优化,升级进行详细的介绍,并向大家分享阿里云Elasticsearch服务。
南方 袋鼠云日志产品经理
企业日志中心建设思路
简介:企业日志中心建设是一个整体和复杂的过程,本次主题向大家分享袋鼠云日志产品在迭代过程踩过的坑,并通过什么样的方案去解决这些问题,同时向大家分享我们在天弘基金、新网银行中建设企业日志中心中的几个实践案例。
朱延生 阿里云Docker团队专家
Kubernetes日志实践
简介:从第一代PaaS平台cloudfoundry到现在的kubernetes容器编排平台,一直从事关于容器云平台研发及解决方案相关工作。容器时代越来越多的传统应用将会逐渐容器化,那么如何在应用容器化过程中方便快捷地自动发现和采集应用日志、如何与日志存储系统协同来高效存储和搜索应用日志将会是关键;本次分享主要介绍容器原生日志输出到容器日志的自动发现与采集,以及高性能容器日志采集部署架构及性能测试。
直播报名
线下报名
欢迎关注“袋鼠云技术团队”微信公众号,获取最新线下及线上活动信息。
活动简介:
互联网时代,创新、高效、速度是企业保持核心竞争力的必要条件。DevOps被描述为“开发团队与运营团队之间更具协作性、更高效的关系”。本次活动邀请到阿里云Docker团队,ES团队、袋鼠云日志团队的同学从各个方面向大家介绍Devops的实践经验,帮助企业更敏捷、更自动化、更高效地实现持续交付。
主办方:袋鼠云
特别支持:养码场、高效运维社区、DBAPLUS、Elastic中文社区、阿里云、跨星、杭州创业大街
报名平台:活动行
直播支持:IT大咖说
活动时间:2018年6月30日13:00-17:00
活动地点:杭州市滨江区阡陌路459号聚光中心内 杭州创业大街C1-105室跨星空间
分享嘉宾:
赵汉青 阿里巴巴集团搜索事业部 高级工程师
Elasticsearch运维实践分享
简介:2014年硕士毕业于中国科学技术大学 曾就职于思科系统(中国)研发有限公司云服务部,本次主题针对Elasticsearch集群运维:监控,诊断,优化,升级进行详细的介绍,并向大家分享阿里云Elasticsearch服务。
南方 袋鼠云日志产品经理
企业日志中心建设思路
简介:企业日志中心建设是一个整体和复杂的过程,本次主题向大家分享袋鼠云日志产品在迭代过程踩过的坑,并通过什么样的方案去解决这些问题,同时向大家分享我们在天弘基金、新网银行中建设企业日志中心中的几个实践案例。
朱延生 阿里云Docker团队专家
Kubernetes日志实践
简介:从第一代PaaS平台cloudfoundry到现在的kubernetes容器编排平台,一直从事关于容器云平台研发及解决方案相关工作。容器时代越来越多的传统应用将会逐渐容器化,那么如何在应用容器化过程中方便快捷地自动发现和采集应用日志、如何与日志存储系统协同来高效存储和搜索应用日志将会是关键;本次分享主要介绍容器原生日志输出到容器日志的自动发现与采集,以及高性能容器日志采集部署架构及性能测试。
直播报名
线下报名
欢迎关注“袋鼠云技术团队”微信公众号,获取最新线下及线上活动信息。
收起阅读 »

社区日报 第313期 (2018-06-25)
http://t.cn/Rrq9Hh5
2.ES集群服务器CPU负载瞬间飚高分析。
https://elasticsearch.cn/article/348
3.SSD硬盘寿命对于ES的性能影响?
https://elasticsearch.cn/question/1932
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:cyberdak
归档:https://elasticsearch.cn/article/682
订阅:https://tinyletter.com/elastic-daily
http://t.cn/Rrq9Hh5
2.ES集群服务器CPU负载瞬间飚高分析。
https://elasticsearch.cn/article/348
3.SSD硬盘寿命对于ES的性能影响?
https://elasticsearch.cn/question/1932
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:cyberdak
归档:https://elasticsearch.cn/article/682
订阅:https://tinyletter.com/elastic-daily
收起阅读 »

社区日报 第312期 (2018-06-24)
http://t.cn/RrGFxIr
2.5大商业SIEM工具。
http://t.cn/RrGFBEa
3.(自备梯子)作为数据科学家不被聘用的4种错误方法?
http://t.cn/RrGDSGi
活动预告:
1.6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2.7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:至尊宝
归档:https://elasticsearch.cn/article/681
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RrGFxIr
2.5大商业SIEM工具。
http://t.cn/RrGFBEa
3.(自备梯子)作为数据科学家不被聘用的4种错误方法?
http://t.cn/RrGDSGi
活动预告:
1.6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2.7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:至尊宝
归档:https://elasticsearch.cn/article/681
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

社区日报 第311期 (2018-06-23)
-
基于hanlp的ES分词插件(可以作为IK的补充)。 http://t.cn/RrAUlTZ
-
Berlin Buzzword 2018中ES开发人员的演讲(需翻墙)。 http://t.cn/RrAcrKY
- 一周热点:一个正则表达式引发的惨案。 http://t.cn/RrAVq9K
活动预告
-
6月30日南京meetup参会报名中 https://elasticsearch.cn/m/article/647
- 7月21日上海meetup演讲申请中 https://elasticsearch.cn/m/article/655
-
基于hanlp的ES分词插件(可以作为IK的补充)。 http://t.cn/RrAUlTZ
-
Berlin Buzzword 2018中ES开发人员的演讲(需翻墙)。 http://t.cn/RrAcrKY
- 一周热点:一个正则表达式引发的惨案。 http://t.cn/RrAVq9K
活动预告
-
6月30日南京meetup参会报名中 https://elasticsearch.cn/m/article/647
- 7月21日上海meetup演讲申请中 https://elasticsearch.cn/m/article/655

社区日报 第310期 (2018-06-22)
http://t.cn/Rrz2mog
2、spring boot elasticsearch 5.x/6.x版本整合详解
http://t.cn/Rrz57ZR
3、elasticsearchr: R语言轻量级的Elasticsearch客户端
http://t.cn/Rrzqk9o
活动预告:
1.6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2.7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:铭毅天下
归档:https://elasticsearch.cn/article/679
订阅:https://tinyletter.com/elastic-daily
http://t.cn/Rrz2mog
2、spring boot elasticsearch 5.x/6.x版本整合详解
http://t.cn/Rrz57ZR
3、elasticsearchr: R语言轻量级的Elasticsearch客户端
http://t.cn/Rrzqk9o
活动预告:
1.6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2.7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:铭毅天下
归档:https://elasticsearch.cn/article/679
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

社区日报 第309期 (2018-06-21)
http://t.cn/Rrvs0I0
2.Elasticsearch:跨集群数据迁移之离线迁移
http://t.cn/RrvsYkX
3.如何使用LogStash将SQL Server数据复制到Elasticsearch
http://t.cn/RrvsR1m
活动预告:
1.6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2.7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:金桥
归档:https://elasticsearch.cn/article/678
订阅:https://tinyletter.com/elastic-daily
http://t.cn/Rrvs0I0
2.Elasticsearch:跨集群数据迁移之离线迁移
http://t.cn/RrvsYkX
3.如何使用LogStash将SQL Server数据复制到Elasticsearch
http://t.cn/RrvsR1m
活动预告:
1.6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2.7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:金桥
归档:https://elasticsearch.cn/article/678
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

社区日报 第308期 (2018-06-20)
http://t.cn/ROrGdqr
2.两个Elaticsearch查询问题分析
http://t.cn/RBI7tSI
3.Elasticsearch filter和query的不同
http://t.cn/R1Gs2NG
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:江水
归档:https://elasticsearch.cn/article/677
订阅:https://tinyletter.com/elastic-daily
http://t.cn/ROrGdqr
2.两个Elaticsearch查询问题分析
http://t.cn/RBI7tSI
3.Elasticsearch filter和query的不同
http://t.cn/R1Gs2NG
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:江水
归档:https://elasticsearch.cn/article/677
订阅:https://tinyletter.com/elastic-daily
收起阅读 »

有老铁测试了es6.3.0的sql功能吗?
执行的时候老出现如下错误,有老铁遇到过吗?
我是这么来启动的
./elasticsearch-sql-cli http://127.0.0.1:9200
sql> show tables;
name | type
----------------+---------------
hello |BASE TABLE
sql> select * from hello;
Server error [Server encountered an error [Cannot extract value [deliveraddress.address] from source]. [SqlIllegalArgumentException[Cannot extract value [deliveraddress.address] from source]
at org.elasticsearch.xpack.sql.execution.search.extractor.FieldHitExtractor.extractFromSource(FieldHitExtractor.java:139)
at org.elasticsearch.xpack.sql.execution.search.extractor.FieldHitExtractor.extract(FieldHitExtractor.java:95)
at org.elasticsearch.xpack.sql.execution.search.SearchHitRowSet.getColumn(SearchHitRowSet.java:114)
at org.elasticsearch.xpack.sql.session.AbstractRowSet.column(AbstractRowSet.java:18)
这是测试数据的mapping
{
"test2": {
"properties": {
"deliveraddress": {
"properties": {
"phone_no": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"default": {
"type": "boolean"
},
"address": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"province": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"city": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"mapping_id": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"name": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"full_address": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"zip_code": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
}
}
},
"alipaywealth": {
"properties": {
"balance": {
"type": "long"
},
"total_quotient": {
"type": "long"
},
"huabei_creditamount": {
"type": "long"
},
"mapping_id": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"huabei_totalcreditamount": {
"type": "long"
},
"total_profit": {
"type": "long"
}
}
},
"id": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
}
}
}
}
这是测试数据
{
"_id": "5b1cbc7935eb6e0007a154bb",
"deliveraddress": [
{
"phone_no": "13*******98",
"default": true,
"address": "江苏省无asdads市徐***镇",
"province": "江苏",
"city": "无锡",
"mapping_id": "3561511087asdasd341",
"name": "b***",
"full_address": "湖asd***上7号",
"zip_code": "214400"
},
{
"phone_no": "15*******70",
"default": false,
"address": "江苏省苏州asdasdasd张家港经济技术开发区",
"province": "江苏",
"city": "苏州",
"mapping_id": "3561511asdasd505341",
"name": "a**",
"full_address": "新asd路***德***",
"zip_code": "215600"
}
],
"alipaywealth": {
"balance": 0,
"total_quotient": 0,
"huabei_creditamount": 500,
"mapping_id": "3561511asdsa63505341",
"huabei_totalcreditamount": 500,
"total_profit": 0
}
}
---
初步怀疑是不是不支持嵌套,数组啥的呀
然后我就翻了翻源码,发现了这个
我的错误就是在最后一个else里出现的
仔细一看,发现这个地方循环只要走了两次,或者前面的条件不成立就肯定会抛这个异常,这怎么看上去像是有点问题呢
@SuppressWarnings("unchecked")
Object extractFromSource(Map<String, Object> map) {
Object value = map;
boolean first = true;
// each node is a key inside the map
for (String node : path) {
if (value == null) {
return null;
} else if (first || value instanceof Map) {
first = false;
value = ((Map<String, Object>) value).get(node);
} else {
throw new SqlIllegalArgumentException("Cannot extract value [{}] from source", fieldName);
}
}
return unwrapMultiValue(value);
}
执行的时候老出现如下错误,有老铁遇到过吗?
我是这么来启动的
./elasticsearch-sql-cli http://127.0.0.1:9200
sql> show tables;
name | type
----------------+---------------
hello |BASE TABLE
sql> select * from hello;
Server error [Server encountered an error [Cannot extract value [deliveraddress.address] from source]. [SqlIllegalArgumentException[Cannot extract value [deliveraddress.address] from source]
at org.elasticsearch.xpack.sql.execution.search.extractor.FieldHitExtractor.extractFromSource(FieldHitExtractor.java:139)
at org.elasticsearch.xpack.sql.execution.search.extractor.FieldHitExtractor.extract(FieldHitExtractor.java:95)
at org.elasticsearch.xpack.sql.execution.search.SearchHitRowSet.getColumn(SearchHitRowSet.java:114)
at org.elasticsearch.xpack.sql.session.AbstractRowSet.column(AbstractRowSet.java:18)
这是测试数据的mapping
{
"test2": {
"properties": {
"deliveraddress": {
"properties": {
"phone_no": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"default": {
"type": "boolean"
},
"address": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"province": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"city": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"mapping_id": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"name": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"full_address": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"zip_code": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
}
}
},
"alipaywealth": {
"properties": {
"balance": {
"type": "long"
},
"total_quotient": {
"type": "long"
},
"huabei_creditamount": {
"type": "long"
},
"mapping_id": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"huabei_totalcreditamount": {
"type": "long"
},
"total_profit": {
"type": "long"
}
}
},
"id": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
}
}
}
}
这是测试数据
{
"_id": "5b1cbc7935eb6e0007a154bb",
"deliveraddress": [
{
"phone_no": "13*******98",
"default": true,
"address": "江苏省无asdads市徐***镇",
"province": "江苏",
"city": "无锡",
"mapping_id": "3561511087asdasd341",
"name": "b***",
"full_address": "湖asd***上7号",
"zip_code": "214400"
},
{
"phone_no": "15*******70",
"default": false,
"address": "江苏省苏州asdasdasd张家港经济技术开发区",
"province": "江苏",
"city": "苏州",
"mapping_id": "3561511asdasd505341",
"name": "a**",
"full_address": "新asd路***德***",
"zip_code": "215600"
}
],
"alipaywealth": {
"balance": 0,
"total_quotient": 0,
"huabei_creditamount": 500,
"mapping_id": "3561511asdsa63505341",
"huabei_totalcreditamount": 500,
"total_profit": 0
}
}
---
初步怀疑是不是不支持嵌套,数组啥的呀
然后我就翻了翻源码,发现了这个
我的错误就是在最后一个else里出现的
仔细一看,发现这个地方循环只要走了两次,或者前面的条件不成立就肯定会抛这个异常,这怎么看上去像是有点问题呢
@SuppressWarnings("unchecked")
Object extractFromSource(Map<String, Object> map) {
Object value = map;
boolean first = true;
// each node is a key inside the map
for (String node : path) {
if (value == null) {
return null;
} else if (first || value instanceof Map) {
first = false;
value = ((Map<String, Object>) value).get(node);
} else {
throw new SqlIllegalArgumentException("Cannot extract value [{}] from source", fieldName);
}
}
return unwrapMultiValue(value);
}
收起阅读 »

社区日报 第307期 (2018-06-19)
http://t.cn/RBubQ7G
2.Elasticsearch 6.3对SQL功能介绍。
http://t.cn/RBuynQh
3.Elasticsearch性能调优指南。
http://t.cn/RBuqkbf
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:叮咚光军
归档:https://elasticsearch.cn/article/675
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RBubQ7G
2.Elasticsearch 6.3对SQL功能介绍。
http://t.cn/RBuynQh
3.Elasticsearch性能调优指南。
http://t.cn/RBuqkbf
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:叮咚光军
归档:https://elasticsearch.cn/article/675
订阅:https://tinyletter.com/elastic-daily
收起阅读 »

社区日报 第306期 (2018-06-18)
http://t.cn/RB8Lbud
2、ElasticSearch 全文搜索精确匹配中文短语
http://t.cn/RB8I1h1
3、elasticsearch 倒排索引原理
http://t.cn/RB8xZq9
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:cyberdak
归档:https://elasticsearch.cn/article/674
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RB8Lbud
2、ElasticSearch 全文搜索精确匹配中文短语
http://t.cn/RB8I1h1
3、elasticsearch 倒排索引原理
http://t.cn/RB8xZq9
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:cyberdak
归档:https://elasticsearch.cn/article/674
订阅:https://tinyletter.com/elastic-daily
收起阅读 »

社区日报 第305期 (2018-06-17)
http://t.cn/RBTxsci
2.(自备梯子)高可用性日志记录中的冒险 - Kubernetes上的Elasticsearch,Logstash和Kibana(ELK)。
http://t.cn/RBY9GYn
3.(自备梯子)是什么能让一个国家善于踢足球?
http://t.cn/RBYKRRC
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:至尊宝
归档:https://elasticsearch.cn/article/673
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RBTxsci
2.(自备梯子)高可用性日志记录中的冒险 - Kubernetes上的Elasticsearch,Logstash和Kibana(ELK)。
http://t.cn/RBY9GYn
3.(自备梯子)是什么能让一个国家善于踢足球?
http://t.cn/RBYKRRC
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:至尊宝
归档:https://elasticsearch.cn/article/673
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

社区日报 第304期 (2018-06-16)
http://t.cn/RBOaaNs
2、elastic common schema: elastic 数据建模的一些最佳实践,不妨来参考
http://t.cn/RBOaW8e
3、Logstash Webinar:入门者不要错过哦,快来注册下
http://t.cn/RBOaHAH
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:rockybean
归档:https://elasticsearch.cn/article/672
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RBOaaNs
2、elastic common schema: elastic 数据建模的一些最佳实践,不妨来参考
http://t.cn/RBOaW8e
3、Logstash Webinar:入门者不要错过哦,快来注册下
http://t.cn/RBOaHAH
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:rockybean
归档:https://elasticsearch.cn/article/672
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

关于同义词检索方案的一点实践经验
最近一直在搞同义词搜索的问题,踩了一些坑,总结了一些经验,尤其是刚刚接触搜索和 ES,所以如果有不对的,或者不完备的地方也希望大家能提出改进意见。。。
下面是自己留下的文档记录:
需求
同义词检索也是搜索引擎必备的功能之一,例如,我们希望用户在搜索广东话的同时,也能找出和粤语有关的信息;用户在搜索苹果手机的同时,包含iPhone的内容也能被检索并呈现。
在现实生活中,相同语义的表述词汇往往有很多,而用户在检索的时候很难在一条 query 中将它们全部体现,所以识别和提供同义词检索显然可以获得更高的召回率。
需求剖析
在思考解决方案之前,我们不妨再来看看刚才提到的两个例子:
- 苹果手机与iPhone
- 广东话与粤语
我们先来看第一个,苹果手机和iPhone。
显然,这两个词是等价的,因为苹果公司发布的所有手机产品都叫 iPhone,而 iPhone 这个名字也没有被其他公司使用过。
于是,当用户搜索“苹果手机购买”的时候,我们也就有理由将它拆分成“苹果手机购买”和“iPhone购买”,分别进行检索,再将结果合并返回。
语言学中对这样的词组,称为是同义词中的相对同义词,或是等义词,等义同义词。它们表达意思完全一致,在绝大多数语境中都可以相互替换,同时对上下文也不会产生影响。
这样的词组还有很多,例如:猫熊和熊猫,柚子和文旦等等,这些等义词大抵来说有这样几种来源:
- 音节减缩形成:机枪和机关枪,坦克和坦克车,电扇和电风扇
- 音译和音译形成:出租车和的士 ,维生素和维他命
- 地域叫法不同,或新旧叫法:单车,自行车和脚踏车,西红柿和番茄,马铃薯,洋芋和土豆,黄瓜和胡瓜
- 昵称代称:周杰伦和周董
- 描述角度不同,学名方言差异:电脑和计算机,曲别针和回形针
这些词组多以名词呈现,数量比较少,词组规模也较小,同时变化也很小。
接下来我们再来看第二组词:广东话和粤语。
广东话和粤语这两个词代表的意思是相同的吗?它们也是可以相互替换的吗?
答案显然是否定的。
广东话从语义本身来说是一个比较粗糙的概念,它不仅指广东省内的粤语,还涵盖了潮汕话,客家话,雷州话等其他方言。而粤语却是一个非常严肃的概念,对语音语调都有非常详细的规定,不仅通用于广东省大部分地区,还包括广西、香港、澳门等地,甚至东南亚和北美。它们联系在于,大部分广东地区的人说的是粤语。
如此说来,给广东话和粤语这样非常相似却又并不完全一致的词直接划上等号是有失偏颇的。当然,其实仔细考虑也不难发现,和广东话有相似之处却又不完全相同的词还有很多,例如:客家话、广州话、广府话等等。
语言学中把这样的词汇,称作是相对同义词,或是近义词。它们在意义上有一些相似之处,只能在特定的语境中进行替换。
它们的差别可能包括:
- 语义上:毁坏和损坏(前者更严重),介绍和说明(前者可以对人施加作用)
- 色彩上:团结和勾结
对于这类相似却又不完全相同的近义词,在搜索的时候提供关联搜索是一个不错的方案。例如用户搜索“毁坏公物如何处罚”的时候,查询结果可以由90%的“损坏公物如何处罚”和10%的“毁坏公物如何处罚”查询结果合并后返回,从而获得更多的召回。
这些近义词以动词为主,不仅数量多,词组的规模也大,例如靠近的近义词可以是:靠拢,逼近,接近,迫近等等。
解决思路
在可替换的等义词问题中,我们可以直接使用 Elasticsearch 原生的 synonyms 功能来完成。虽说原生 synonyms 功能不支持热更新,而且需要将词典事先放进制定目录,不过好在这类等义词数量并不多,变化也并不大,尚且属于一劳永逸的任务。
对于不可直接替换的近义词问题,如果直接套用原生的 Synonyms 虽然可能会带来更多召回,但是查准率却骤降。
对于这类问题,我们期待的场景是,一旦发现用户 query 中的某个词有近义词,我们就将它拆分替换,成为多个 query 进行联合搜索。就像前面的例子:用户搜索“损坏公物如何处罚”的时候,查询结果可以由90%的“损坏公物如何处罚”和10%的“毁坏公物如何处罚”查询结果合并后返回。如此说来,使用 Elasticsearch 提供的 boosting_query 就成为了一个自然而然的想法。
不过稍加思考也不难发现,boosting_query 中 weight 的获得并不容易,也就是前面例子中的90%和10%这组数字应该怎么设定,这也是近义词联合搜索中的重点。
先回到我们刚才的例子:当用户搜索“损坏公物如何处罚”的时候,我们本能地觉得用90%的损坏和10%的毁坏合并在一起是“合理的”,这样的本能其实是来自于:我们主观地认为在检索“搞坏公物”这个事实的时候,90%的用户会使用毁坏来描述,10%的用户会使用损坏来描述。
简而言之,这组数字可以理解为用户群体描述同一个问题时,对词组选择的组成比例。再换个说法,也就是在当前这条 query 中,原词和近义词之间的可替换程度。
再举一例,在“广东话入门”这条 query 中,从“表达学习语言”的语义上来看,广东话和粤语差别并不大,这条 query 自然可以拆分成“广东话入门”和“粤语入门”,进行联合搜索,而且它们的 weight 甚至可以设置为 1:1 来获得更多合理的召回。
反过来,在“粤语歌曲推荐”这条 query 中,广东话的 weight 就需要慎重考虑,一方面是因为本身就没有“广东话歌曲”这种说法,另一方面也因为在广泛的语料中,歌曲和广东话这两个词极少同时被提及。所以几遍是“粤语歌曲推荐”的拆分成分中有“广东话歌曲推荐”,weight 也需要被设置地非常低(倘若真的没有“粤语歌曲”相关的内容,推荐“广东话”的内容作为替补)。
说到这里,其实已经很明白了,语言模型是可以在这里被使用的,而语言模型的困惑度也与前面提到的 weight 一脉相承。
所以大致计算流程可以是:获得用户的query之后进行分词,在词组中寻找所有可能的同义词替换,将所有替换后的 query 分别放进语言模型中获得困惑度(或其他 metrics),依据它们来作为 boosting query 中的 weight。
graph TD;
广东话入门-->'广东话','入门';
'广东话','入门'-->_'广东话','入门'_;
'广东话','入门'-->_'粤语','入门'_;
_'广东话','入门'_-->语言模型;
_'粤语','入门'_-->语言模型;
语言模型-->PPL:0.65;
语言模型-->PPL:0.35;
对于这里语言模型的选择,可以使用传统的ngram,也可以使用双向的LSTM这样一些成熟的方案从语料中训练,也可以使用一些现成的方案:http://ai.baidu.com/tech/nlp/dnnlm_cn
最近一直在搞同义词搜索的问题,踩了一些坑,总结了一些经验,尤其是刚刚接触搜索和 ES,所以如果有不对的,或者不完备的地方也希望大家能提出改进意见。。。
下面是自己留下的文档记录:
需求
同义词检索也是搜索引擎必备的功能之一,例如,我们希望用户在搜索广东话的同时,也能找出和粤语有关的信息;用户在搜索苹果手机的同时,包含iPhone的内容也能被检索并呈现。
在现实生活中,相同语义的表述词汇往往有很多,而用户在检索的时候很难在一条 query 中将它们全部体现,所以识别和提供同义词检索显然可以获得更高的召回率。
需求剖析
在思考解决方案之前,我们不妨再来看看刚才提到的两个例子:
- 苹果手机与iPhone
- 广东话与粤语
我们先来看第一个,苹果手机和iPhone。
显然,这两个词是等价的,因为苹果公司发布的所有手机产品都叫 iPhone,而 iPhone 这个名字也没有被其他公司使用过。
于是,当用户搜索“苹果手机购买”的时候,我们也就有理由将它拆分成“苹果手机购买”和“iPhone购买”,分别进行检索,再将结果合并返回。
语言学中对这样的词组,称为是同义词中的相对同义词,或是等义词,等义同义词。它们表达意思完全一致,在绝大多数语境中都可以相互替换,同时对上下文也不会产生影响。
这样的词组还有很多,例如:猫熊和熊猫,柚子和文旦等等,这些等义词大抵来说有这样几种来源:
- 音节减缩形成:机枪和机关枪,坦克和坦克车,电扇和电风扇
- 音译和音译形成:出租车和的士 ,维生素和维他命
- 地域叫法不同,或新旧叫法:单车,自行车和脚踏车,西红柿和番茄,马铃薯,洋芋和土豆,黄瓜和胡瓜
- 昵称代称:周杰伦和周董
- 描述角度不同,学名方言差异:电脑和计算机,曲别针和回形针
这些词组多以名词呈现,数量比较少,词组规模也较小,同时变化也很小。
接下来我们再来看第二组词:广东话和粤语。
广东话和粤语这两个词代表的意思是相同的吗?它们也是可以相互替换的吗?
答案显然是否定的。
广东话从语义本身来说是一个比较粗糙的概念,它不仅指广东省内的粤语,还涵盖了潮汕话,客家话,雷州话等其他方言。而粤语却是一个非常严肃的概念,对语音语调都有非常详细的规定,不仅通用于广东省大部分地区,还包括广西、香港、澳门等地,甚至东南亚和北美。它们联系在于,大部分广东地区的人说的是粤语。
如此说来,给广东话和粤语这样非常相似却又并不完全一致的词直接划上等号是有失偏颇的。当然,其实仔细考虑也不难发现,和广东话有相似之处却又不完全相同的词还有很多,例如:客家话、广州话、广府话等等。
语言学中把这样的词汇,称作是相对同义词,或是近义词。它们在意义上有一些相似之处,只能在特定的语境中进行替换。
它们的差别可能包括:
- 语义上:毁坏和损坏(前者更严重),介绍和说明(前者可以对人施加作用)
- 色彩上:团结和勾结
对于这类相似却又不完全相同的近义词,在搜索的时候提供关联搜索是一个不错的方案。例如用户搜索“毁坏公物如何处罚”的时候,查询结果可以由90%的“损坏公物如何处罚”和10%的“毁坏公物如何处罚”查询结果合并后返回,从而获得更多的召回。
这些近义词以动词为主,不仅数量多,词组的规模也大,例如靠近的近义词可以是:靠拢,逼近,接近,迫近等等。
解决思路
在可替换的等义词问题中,我们可以直接使用 Elasticsearch 原生的 synonyms 功能来完成。虽说原生 synonyms 功能不支持热更新,而且需要将词典事先放进制定目录,不过好在这类等义词数量并不多,变化也并不大,尚且属于一劳永逸的任务。
对于不可直接替换的近义词问题,如果直接套用原生的 Synonyms 虽然可能会带来更多召回,但是查准率却骤降。
对于这类问题,我们期待的场景是,一旦发现用户 query 中的某个词有近义词,我们就将它拆分替换,成为多个 query 进行联合搜索。就像前面的例子:用户搜索“损坏公物如何处罚”的时候,查询结果可以由90%的“损坏公物如何处罚”和10%的“毁坏公物如何处罚”查询结果合并后返回。如此说来,使用 Elasticsearch 提供的 boosting_query 就成为了一个自然而然的想法。
不过稍加思考也不难发现,boosting_query 中 weight 的获得并不容易,也就是前面例子中的90%和10%这组数字应该怎么设定,这也是近义词联合搜索中的重点。
先回到我们刚才的例子:当用户搜索“损坏公物如何处罚”的时候,我们本能地觉得用90%的损坏和10%的毁坏合并在一起是“合理的”,这样的本能其实是来自于:我们主观地认为在检索“搞坏公物”这个事实的时候,90%的用户会使用毁坏来描述,10%的用户会使用损坏来描述。
简而言之,这组数字可以理解为用户群体描述同一个问题时,对词组选择的组成比例。再换个说法,也就是在当前这条 query 中,原词和近义词之间的可替换程度。
再举一例,在“广东话入门”这条 query 中,从“表达学习语言”的语义上来看,广东话和粤语差别并不大,这条 query 自然可以拆分成“广东话入门”和“粤语入门”,进行联合搜索,而且它们的 weight 甚至可以设置为 1:1 来获得更多合理的召回。
反过来,在“粤语歌曲推荐”这条 query 中,广东话的 weight 就需要慎重考虑,一方面是因为本身就没有“广东话歌曲”这种说法,另一方面也因为在广泛的语料中,歌曲和广东话这两个词极少同时被提及。所以几遍是“粤语歌曲推荐”的拆分成分中有“广东话歌曲推荐”,weight 也需要被设置地非常低(倘若真的没有“粤语歌曲”相关的内容,推荐“广东话”的内容作为替补)。
说到这里,其实已经很明白了,语言模型是可以在这里被使用的,而语言模型的困惑度也与前面提到的 weight 一脉相承。
所以大致计算流程可以是:获得用户的query之后进行分词,在词组中寻找所有可能的同义词替换,将所有替换后的 query 分别放进语言模型中获得困惑度(或其他 metrics),依据它们来作为 boosting query 中的 weight。
graph TD;
广东话入门-->'广东话','入门';
'广东话','入门'-->_'广东话','入门'_;
'广东话','入门'-->_'粤语','入门'_;
_'广东话','入门'_-->语言模型;
_'粤语','入门'_-->语言模型;
语言模型-->PPL:0.65;
语言模型-->PPL:0.35;
对于这里语言模型的选择,可以使用传统的ngram,也可以使用双向的LSTM这样一些成熟的方案从语料中训练,也可以使用一些现成的方案:http://ai.baidu.com/tech/nlp/dnnlm_cn
收起阅读 »
社区日报 第303期 (2018-06-15)
http://t.cn/R1Upw7t
2、Elasticsearch高效管理时序数据
http://t.cn/RBodlTg
3、Elasticsearch机器学习插件
http://t.cn/RJu5cw5
活动预告
6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:铭毅天下
归档:https://elasticsearch.cn/article/669
订阅:https://tinyletter.com/elastic-daily
http://t.cn/R1Upw7t
2、Elasticsearch高效管理时序数据
http://t.cn/RBodlTg
3、Elasticsearch机器学习插件
http://t.cn/RJu5cw5
活动预告
6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:铭毅天下
归档:https://elasticsearch.cn/article/669
订阅:https://tinyletter.com/elastic-daily 收起阅读 »