校园论坛项目总结

1.Elasticsearch站内搜索模块

es相当于一个分布式的数据库。
参考例子
https://www.letiantian.me/site-search-tutorial/
https://imququ.com/post/elasticsearch.html
https://github.com/letiantian/jianshu-site-search/blob/master/es_search.py
https://www.jianshu.com/p/fa31f38d241e
https://blog.csdn.net/john_bian/article/details/74502323

2.elasticsearch基本原理:

1.对搜索内容进行分词,得到若干搜索词
2.通过倒排索引找到含有搜索词的文章集合
3.通过TF-IDF,余弦相似性计算文章集合中每个文章和搜索内容的相似性
4.根据相似性进行排序,得到搜索结果。
elasticsearch中TF-IDF算法的解析

TF-IDFhttp://www.ruanyifeng.com/blog/2013/03/tf-idf.html
余弦相似性http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html
es的一些思考
如何看待分词
停止词是非常常见的分词,例如的,the等,一般用法是在分词之后去掉停止词,然后进行索引。这种做法的常见理由是减少索引大小,同时,从理论上可以提升检索速度。
这里有两个问题:
1.索引大小的减少是什么数量级,如果只是减少了1%,这种优化没有必要
2.索引速度的提升是什么数量级,如果只是提升1%,说服力并不大。
是否能达到业务的需求才是目标,如果需要在搜索的这个词的时候有结果,那么上面的做法是不合理的。建议倾向于底层索引不启动停止词,而是根据业务需求在业务层进行必要的停止词的处理。
防止深度搜索
要Elasticsearch返回搜索结果的第10001条到第10010条数据,是一个耗时的操作,因为Elasticsearch要先得到打分最高的前10010条数据,然后从中取出10001条到10010条数据;用户感知到的搜索界面是分页的,每页是固定数量的数据(如10条),用户会跳转到第1001页的搜索结果吗?不会,第1001页的搜索结果有意义吗?没有意义,用户应该调整搜索词。
所以,我们应该限制用户的搜索结果数量。
处理海量数据
项目中的实例中数据量比较小,当数据量大的时候怎么办?事实上,Elasticsearch支持分片和分布式部署,能紧实时的处理海量数据;主要索引耗时会很大,但是搜索会很快。

3.将mysql中的数据同步到elasticSearch

利用一个组件go-mysql-elasticsearch
参考链接:
https://www.jianshu.com/p/96c7858b580f
https://www.helplib.com/GitHub/article_119396
https://github.com/siddontang/go-mysql-elasticsearch/issues/190
https://blog.csdn.net/keda8997110/article/details/50895171

4.mysql中的主从问题

你可能感兴趣的:(校园论坛项目总结)