本篇内容介绍了“es搜索优化和mysql查询优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
这周优化了我们沙抖官网搜索的功能,这个搜索目前是根据视频标题进行匹配,之前是对用户输入的关键词进行了分词查找,比如用户输入【机器人】,这样的话,只要视频标题中有关键词的任意一个字都会被搜到,比如含有【人】字的标题会展示出来,并可能排的很靠前,所以我就对当前的搜索进行了优化,现在搜索是优先进行相邻短语查询 match_phrase,如果相邻短语查询结果小于2个就进行普通的分词查询,这个相邻短语查询是要求在请求字符串中的所有查询项必须都在文档中存在,文中顺序也得和请求字符串一致,且彼此相连。这样查询的话,标题中含有【机器人】的结果肯定在前。
修改后的查询body体为:
{ "query": { "bool": { "filter": { "match_phrase": { "video_title": word } }, "must": { "range": { "video_date": { "gte": "now-30d+8h", "lte": "now+8h" } } } } }, "sort": { "video_like": { "order": "desc" } }, "from": start, "size": size, "highlight": { "pre_tags": [ "<strong style='color:red'>" ], "post_tags": [ "</strong>" ], "fields": { "video_title": { } } }}
这周内我还对我们的数据表查询进行了优化,加了普通索引和联合索引,现在我们一个视频数据表的数据量是几百兆大小,根据视频行业进行查询时,mysql 响应速度在 600ms 左右,我对行业字段添加了普通索引,查询响应在 30 ms 左右,前后对比优化结果还是很明显的。我们还有根据视频分类进行筛选的功能,视频表的查询条件经常用到视频发布时间和视频分类字段,我就给这俩加了联合索引。添加联合索引后,查询速度也是在 30ms 左右。正如网友所说,如果正确设计并且使用索引 mysql 就是一辆兰博基尼,否则的话它就是人力三轮车。
添加索引语句如下:
1.普通索引ALTER TABLE `aweme_data` ADD INDEX category_id_index ( `category_id` );2.添加联合索引ALTER TABLE `aweme_data` ADD INDEX type_create_time ( `type_id`, `aweme_create_time`);
“es搜索优化和mysql查询优化”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4579283/blog/4351015