欢迎投稿

今日深度:

基于Elasticsearch的搜索优化,elasticsearch优化

基于Elasticsearch的搜索优化,elasticsearch优化


高吞吐量查询优化

因业务扩展,es 内数据不断增多,查询压力也不断增大,直至已经严重影响用户体验,故需进行彻底整改。

在整改过程中,经过不断尝试,关于 ES 查询方面总结为以下几点:


升级ES

随着用户量的增加,必不可少的采取了加机器、换SSD等措施,同时升级es,ES6.0性能较之前会有大幅提升。


自定义分词器

因业务原因,例如“美的”这类特殊词汇的监测等等,改造了分词器,变成了单字分词。

但单字分词,有利有弊,随着业务增加,弊端不断暴露,如一个 “的” 字对应的文档数量几乎等同于所有的文档数量,导致查询速度急速下降。


采用bigrams

 n-grams 方式,将含有m个字符的一句话拆分成m-1个n字符词汇,依次查询并组合结果集,这种查询会使查询效率在一定程度上有所提高,毕竟减少了每个词所需检索的文档数。

这种方式的弊端:不能适应单字查询与距离查询,须通过业务逻辑来满足业务需求。


巧用filter过滤

es 的过滤器有缓存的功能,且会优先进行过滤器里面的查询条件,综合自己的业务场景,提炼出一些能够大大减少文档数且相对固定的过滤词,能够大大提升查询效率,相对固定是为了能够复用缓存数据。如有必要,可推动改进业务需求来满足这一点。


查询语句优化

对于多个词的搜索,在使用多个单词query_string、should连接,单个多词query_string,match_phrase的方式都可以的情况下,这几种方式性能优劣是怎样的呢?

下面是具体场景的测试用例:



query_string (0)

(多个主体词空格分隔)

query_string (1)

(单个主体词)

 match (2)

(单个主体词)  



非bigram方式(0)bigram方式 (1)非bigram方式(0) bigram方式  (1)非bigram方式(0)bigram方式 (1)
用例编号是否过滤命中量用时ms命中量用时ms命中量用时ms命中量用时ms 命中量用时ms 命中量用时ms 
1不加过滤(0)119774046119774046119774046119774046119774046119774046
主体过滤(1)1116140632624255935205300247522332472288624723352
关键词过滤(3)119976299119975179119975010119974081119974094119973700
2不加过滤732115327321153273211532732115327321153273211532
主体过滤73011855726357072913105726352572665577269565
关键词过滤7333709673315603733159197338616733183867338773
3不加过滤246975462469754624697546246975462469754624697546
主体过滤24697109246951182469738324695722469522024695180
关键词过滤24695309246959624695120246958224695822469590
4不加过滤455284374552843745528437455284374552843745528437
主体过滤4532929445181664522995845182374511158645114432
关键词过滤456596744563375845633569456201284563077145620193
5不加过滤154034121540341215403412154034121540341215403412
主体过滤154034871542276415404962154226131542334115423515
关键词过滤154276501542397115426345154234281542360015423409
6不加过滤972422541972422541972422541972422541972422541972422541
主体过滤972422809974222356972426506974222276974223226974225104
关键词过滤974231445974226589974226867974226092974223635974224348


     
用例编号用例名称主体词关键词全文排除词 
1家乐福家乐福<家乐福 食品安全>~15|<家乐福 企业社会责任>~15|<家乐福 O2O>~15|<家乐福 电商>~15|<家乐福 行业态势>~15|<家乐福 生鲜>~15|<家乐福 可持续发展>~15|<家乐福 新零售>~15|<沃尔玛 食品安全>~10|<沃尔玛 企业社会责任>~10|<沃尔玛 O2O>~10|<沃尔玛 电商>~10|<沃尔玛 行业态势>~10|<沃尔玛 生鲜>~10|<沃尔玛 可持续发展>~10|<沃尔玛 新零售>~10|<永辉超市 食品安全>~15|<永辉超市 企业社会责任>~15|<永辉超市 O2O>~15|<永辉超市 电商>~15|<永辉超市 行业态势>~15|<永辉超市 生鲜>~15|<永辉超市 可持续发展>~15|<永辉超市 新零售>~15|盒马生鲜|<盒马生鲜 新零售>~15  
2东升产品信息东升,博展东升大厦|智造大街绿能基地|绿色能源产业基地|东升凯莱酒店|林萃路商务酒店|清河商务酒店|清河桥商务酒店|学清路商务酒店|La Vie商业广场|66号成长屋|东升加速器|东升孵化器|东升杯创业大赛|东升博展物业|博展投资|东升知春物业|东升博展酒店|悦华庭酒店|东升博展科技|东升科技企业加速器|东昇合创科技孵化器|三符整合营销机构|((东升科技园|东升集团|东升博展)&(一卡通|ville商业街|梦想家园|伊布里克咖啡|果士芙|钰花溪|北领地|赛百味|没名儿生煎|咖啡陪你|吃茶去|张亮麻辣烫|7-11|奥力健身房|汉堡王|吉野家|明洞邦|面爱面|海南鸡饭|居酒屋|乐刻健身|星巴克咖啡|鲍师傅|DQ))|(东升科技园|东升博展|博展集团)&(投融资|小额贷|直投|基金|信用评估)|((王小东|陈斌|李宝林|徐振辉|卢金玲|颜海军|刘亚洁|续卫国|刘新强|符志刚|卢维维|代庆|党玉林|郭小庆|余熊杰|张奕)&(博展|东升博展))  
3礼品礼品礼品  
4东升产品信息+排除东升,博展东升大厦|智造大街绿能基地|绿色能源产业基地|东升凯莱酒店|林萃路商务酒店|清河商务酒店|清河桥商务酒店|学清路商务酒店|La Vie商业广场|66号成长屋|东升加速器|东升孵化器|东升杯创业大赛|东升博展物业|博展投资|东升知春物业|东升博展酒店|悦华庭酒店|东升博展科技|东升科技企业加速器|东昇合创科技孵化器|三符整合营销机构|((东升科技园|东升集团|东升博展)&(一卡通|ville商业街|梦想家园|伊布里克咖啡|果士芙|钰花溪|北领地|赛百味|没名儿生煎|咖啡陪你|吃茶去|张亮麻辣烫|7-11|奥力健身房|汉堡王|吉野家|明洞邦|面爱面|海南鸡饭|居酒屋|乐刻健身|星巴克咖啡|鲍师傅|DQ))|(东升科技园|东升博展|博展集团)&(投融资|小额贷|直投|基金|信用评估)|((王小东|陈斌|李宝林|徐振辉|卢金玲|颜海军|刘亚洁|续卫国|刘新强|符志刚|卢维维|代庆|党玉林|郭小庆|余熊杰|张奕)&(博展|东升博展))大城县东升大厦西侧,清代,第一代,招聘,出租,招租,www.454726.net,求租,请选择网点,吃过8家以上才算真吃货,以下是海口在,1室1厅,附近有苏果超市和欧尚超市有环宇城,呷哺呷哺,长兴欧洲花园,两间门面,霍兰公寓,中梁集团,2房2厅,到珍珠园饭店怎么走,嘉兴万家汇,请选择网点,上海收人头马路易十三洋酒礼盒路易十三洋酒回收价格上门回收,公交沧海路百丈东路口站往北移200米,金隅国际到欧尚超市来广营店怎么走,汇金国际广场-欢迎您实地考察,公交站点集合出发,二手房,房屋类型,周边配套设施,小区建筑面积,无中介费,拎包入住,区周边配套,租房合同,蜀汉路欧尚超市后面,房屋精装修,骑行溧水石湫农家乐,房屋户型,学府具体位置,四室二厅,一室一厅,二室一厅,二室二厅,三室一厅,三室二厅,怎么坐公交车,张国银老师卓越团队管理专家曾任,1室1厅,2室1厅,3室1厅,2室2厅,3室2厅,4室2厅,吴江-国贸商业中心,吴江国贸中心,吴江国贸商业中心,国贸商业中心销售热线,不收中介费,杨公井捷安特活动,小区规划,小区配套,租金可谈,两室一厅,两室两厅,两室二厅,租房子,转租,无中介,押一付三,押一付一,押二付二,押一付二,押二付一,月付,自家宝宝穿的,楼盘,年产权,看房时间,看房人数,合租,20号、21号海阳连理岛赏胶东半岛最美油菜花,售楼处,欧尚超市门口乘,天行健健身,看房热线,现房,房屋信息,一室两厅,一室二厅,48路、209路、847路75路、36路,欧尚超市正对面,欧尚超市斜对面,公益徒步大会活动,家养小猫还剩,原本夜逛嘉兴月河计划泡汤,镇江酷跃蹦床主题公园VIP体验卡,中吴大道兰陵路三院欧尚超市东,改善型品质住宅,生态居住环境,三室两厅,四室两厅,二室两厅 
5高鑫零售高鑫,大润发<(高鑫零售|高鑫超市) (食品安全|企业社会责任|"OTO"|电商|行业态势|生鲜|可持续发展)>~20|<大润发 食品安全>~20|<大润发 企业社会责任>~20|<大润发 "OTO">~20|<大润发 电商>~20|<大润发 行业态势>~20|<大润发 生鲜>~20|<大润发 可持续发展>~20  
6北京医改北京,医改<北京 医事服务费|医药分开|挂号费|公立医院改革|公立医院的综合改革|医院综合改革|医疗服务价格|阳光采购|医药分开|医药集中采购|医药集中招标|药品集中采购|药品集中招标|药物采购|医疗改革|医改新政|分机诊疗|医药分开综合改革|医改新政|以药补医|以药养医|零差率销售|医改|医院综合改革|医药卫生体制|药品加成|医疗服务价格|药品零差率|社会办医>~30  

结论:

针对测试结果,单词query_string方式 + bigrams + 主体过滤效果最好

(注:此处的bigrams只针对过滤词,不针对话题语法)


延伸测试:

最优方式 + 话题关键词bigram:

在此基础上,对于非距离话题的话题语法部分  使用bigrams方式  进行进一步测试,结果如下:

话题2    命中量:726          用时:717                  (原测试最优结果    命中量:726        用时:3525 )

话题3    命中量:24695      用时:74                    (原测试最优结果    命中量:24695    用时:72 )

话题4    命中量:451          用时:1951                (原测试最优结果    命中量:451        用时:8237)

效果较好


按时间建立索引

对于这些业务场景的查询,一般都会有时间的范围限制,可以针对具体的业务场景做一些变更,例如本案例中的业务场景多数会查看使用近一天、近三天的数据,一个是可以采用es新版本提供的关于近几天时间的过滤查询,另一种就是在es集群创建索引的规则上做一些处理。

关于时间索引,可以按天创建索引,也可以按月创建索引,根据业务需要做不同选择,那么问题来了,随着时间的推移,索引数量会越来越多,对es的性能也会有影响。这时候我们会发现,对于历史悠久的数据不会经常被使用,这部分数据称之为冷数据,这些数据就可以集中放在一个索引中,有使用需求时直接去这个里面查询即可,随之而来的工作量就是数据迁移以及数据清理工作,对于根本不会使用的数据要及时清理。


以上就是对于查询部分的优化探索之路,仅查询部分速率提升了20%。

不过此次整改不仅针对es查询做了优化,还使用了业务缓存,整体性能提升显著,百万级别的数据搜索达到秒级别,虽解决了问题,但是es的优化还在不断进行中,欢迎指教~


www.htsjk.Com true http://www.htsjk.com/Elasticsearch/31530.html NewsArticle 基于Elasticsearch的搜索优化,elasticsearch优化 高吞吐量查询优化 因业务扩展,es 内数据不断增多,查询压力也不断增大,直至已经严重影响用户体验,故需进行彻底整改。 在整改过程中...
相关文章
    暂无相关文章
评论暂时关闭