首页 > 其他分享 >鱼皮聚合搜索项目总结

鱼皮聚合搜索项目总结

时间:2023-08-19 23:23:54浏览次数:39  
标签:聚合 String 索引 搜索 Es 鱼皮 数据 es

鱼皮聚合搜索项目笔记+收获

一、收获:

1、使用AXIOS向后端发送请求语法:

myAxios.post("search/all", query).then((res: any) => {}

post请求方式 search/all请求后端的路径 query请求的参数 res响应回来的数据

2、爬虫,如何爬虫:

方法:HttpClient、OKHttp、RestTemplate、HuTool

本项目使用hutool进行爬虫。

a、引入HuTool的依赖

b、示例代码:

if("".equals(searchText) || searchText == null){
    url = String.format("https://cn.bing.com/images/search?q=null&form=IQFRBA&id=77" +
                        "B5251F2BB54280F4E1360130B1FECD4CF816E7&first=%s", current);
}else {
    url = String.format("https://cn.bing.com/images/search?q=%s&form=IQFRBA&id=77" +
                        "B5251F2BB54280F4E1360130B1FECD4CF816E7&first=%s", searchText, current);
}
try{
    doc = Jsoup.connect(url).get();
}catch (IOException e){
    throw new BusinessException(ErrorCode.PARAMS_ERROR,"数据获取异常");
}
Elements elements = doc.select(".iuscp.isv");
/* log(doc.title());
 Elements newsHeadlines = doc.select("#mp-itn b a");*/
for (Element element : elements) {
    String m = element.select(".iusc").get(0).attr("m");
    String title = element.select(".inflnk").get(0).attr("aria-label");
    Map<String,Object> map = JSONUtil.toBean(m, Map.class);
    String  murl =(String) map.get("murl");
    Picture picture = new Picture();
    picture.setTitle(title);
    picture.setUrl(murl);
    pictures.add(picture);
    if(pictures.size() > pageSize){
        break;
    }
}

3、统一接口,定制统一的数据源接入规范,方便其他人调用,这里讲到门面模式、适配器模式、注册器模式

a、门面模式:相当于生活中的酒店前台,在前台处分配具体的房间号。前台传一个type,根据type类型去掉不同的接口。

b、注册器模式主要解决if else的问题,解决代码冗余问题。抽取一个枚举类,用for循环来代替

if (ObjectUtils.isEmpty(value)) {
    return null;
}
for (SearchTypeEnum anEnum : SearchTypeEnum.values()) {
    if (anEnum.value.equals(value)) {
        return anEnum;
    }
}
return null;

c、适配器模式:通过转换,让两个系统能够完成对接。

4、Elastic Search 技术栈:

Logstash:从多个采集器或数据源来抽取/转换数据,向es输送 启动命令 bin目录下 cmd -- logstash.bat -f ..\config\mytask.conf mytask.conf 为config下新建的配置文件。

elasticsearch:存储、查询数据 启动命令 bin目录下 cmd -- elasticsearch.bat

kibana:可视化es数据。启动命令,bin目录下 cmd --kibana

二、遇到的问题

1、后台用es的ElasticsearchRestTemplate类的search方法,查不到数据,因为索引搞错。

2、其他忘记了。。。

三、笔记

1、前端开发:用url 记录页面搜索状态,当用户刷新页面时,能够从url还原之前的搜索状态

url <=>页面状态

将双向变单向

2、整合axios:就是前端向后端发起请求获取数据的库。

3、获取不同类型的数据源

a.文章 内部 爬虫技术 要入库,离线抓取

b.用户 内部

c.图片 外部 实时抓取 我们网站不存 用户搜索的时候从别的网站拿过来。要做个适配。

4、数据抓取的方式 使用hutool

a.直接访问数据接口

b.等网页渲染出明文内容,从前端页面内容抓取

c.点按钮才显示数据时,用无头浏览器:selenium、node.js puppeter

5、获取到html文档,然后从中解析出需要的字段。 jsoup

浏览器同一时间内只允许发送六个请求多了要排队

6、聚合接口

a.用一个接口请求完所有的数据

b.前端传什么固定,后端对参数统一处理

c.通过不同的参数区别不同的数据

7、聚合接口优化

怎么能一次搜索出所有数据,又能分别获取某一类数据。

数据同步 、Elastic Stack(搜索引擎)

门面模式:多个客户端请求 facade ,facade帮助做计算返回给前端。当调用系统的客户端觉得麻烦的时候,应该思考抽象一个门面。

适配器模式:if else多的时候,定制统一数据源规范标准,满足的要求,

任何接入我们系统的数据 要能关键词搜索 要分页搜索。

规范:通过声明接口来定义规范。

泛型方法上和类上都有有啥区别

Es索引数据迁移 对索引起个别名 好处

适配器模式:进行转换,让两个系统能够完成对接

注册模式和单例模式类似 :提前通过map存储好需要调用的对象。

8、搜索不够灵活 技术Elastic Search https://www.elastic.co/cn/

包含了数据的整合 =》提取 =》存储 =》使用,一整套。

9、es中索引 ==》mysql里的表

10、Es不止存储,还能分词,非常高效和灵活

索引:书籍的目录,快速的找到内容正向索引

mysql索引为正序如字典,Es的索引为倒排索引

11、Es几种调用方式:RestFul调用 发送http请求、kibana devtools

Es:9200:给外部访问的端口 9300给Es集群内部通信的

12、Es中mapping代表数据库的表结构 也可以手动指定mapping

13、Es分词器:分词的一种规则

a.空格分词器

b.标准分词规则

14、数据同步:把数据从mysql同步到es。

a.首次安装完es,全量同步到es 。增量同步:定时任务 优点:不同引入第三方中间件。缺点:有时间差。

b.双写:写数据时候必须写ES。更新删除数据库同理。(要用事务)单项的 MySql=》ES 可以通过定时任务+日志+告警进行检测和修复

c.Es的工具:用Logstash数据同步管道,一般配合kafka+消息队列+beats采集器使用 性能较差

15、Logstash传输和处理数据的管道

16、预编译sql优点:快、防注入、性能好。

17、jmeter做压力测试的

 

标签:聚合,String,索引,搜索,Es,鱼皮,数据,es
From: https://www.cnblogs.com/yulili1101/p/17643417.html

相关文章

  • 【23.0】搜索功能搭建
    【一】搜索功能后端luffyCity\luffyCity\apps\course\views.py#搜索---查询所有+过滤classSearchCourseView(GenericViewSet,ListModelMixin):serializer_class=CourseSerializerqueryset=Course.objects.filter(is_delete=False,is_show=True).order_......
  • 二分搜索法-C++
    二分法,就是对一个数组中,已经排好序的数字进行搜索。使用二分法的前提条件:1.是一个数组2.该数组中的数字已经是有序的,比如升序的数字或者降序的数字都可以。inta[]={1,2,3,4};   intb[]={4,3,2,1};3.该数组中没有出现重复的数字 二分法原理:就是对一个数组,不断的划分......
  • 基于Redis的Geo实现附近商铺搜索(含源码)
    微信公众号访问地址:基于Redis的Geo实现附近商铺搜索(含源码)一、GEO常用命令及使用示范1.1、GEO的数据结构GEO 就是 Geolocation 的简写形式,代表地理坐标。Redis 在 3.2 版本中加入了对 GEO 的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有:1、GEOAD......
  • 剑指 Offer 54. 二叉搜索树的第k大节点
    方法一:由于是有序的平衡二叉树,因此是中序。根据dfs中序迭代求得递增排序后,再反转就可求得结果。classSolution{public:vector<int>tmp;intkthLargest(TreeNode*root,intk){//if(root!=NULL)returndfs(root);reverse(tmp.be......
  • 剑指 Offer 36. 二叉搜索树与双向链表
    本题比较重要的有两点:1.一般认为有序的二叉搜索树,都是中序遍历。2.中序遍历的递归顺序,得到的就是排好序的,就是链表的顺序,因此只需管遍历的过程中的链表指向即可。classSolution{public://pre将来指向尾节点,head指向头节点Node*pre=nullptr,*head=nullptr;......
  • 二叉搜索树
    博客地址:https://www.cnblogs.com/zylyehuo/#-*-coding:utf-8-*-#构造二叉树classBiTreeNode:def__init__(self,data):self.data=dataself.lchild=None#左孩子self.rchild=None#右孩子self.parent=None......
  • Django对不确定多条件进行求交集搜索
    使用Django的Q方法创建搜索条件:name=request.GET.get('name')pages=request.GET.get('pages')operator=request.GET.get('operator')date1=request.GET.get('date1')date2=re......
  • elementUI使用分页器以及搜索条件
    <template><div><!--搜索--><divstyle="float:left"><el-form:inline="true":model="formInline"class="demo-form-inline"size="mini"><el-form-......
  • 基于 Easysearch kNN 搭建即时图片搜索服务
    环境准备启动 Easysearch 服务:#Makesureyourvm.max_map_countmeetstherequirementsudosysctl-wvm.max_map_count=262144dockerrun-it--rm-p9200:9200\-e"discovery.type=single-node"\-eES_JAVA_OPTS="-Xms512m-Xmx512m"\......
  • 【剑指Offer】62、二叉搜索树的第k个结点
    【剑指Offer】62、二叉搜索树的第k个结点题目描述:给定一棵二叉搜索树,请找出其中的第k小的结点。例如(5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。解题思路:本题实际上比较简单,主要还是考察对树的遍历的理解,只要熟练掌握了树的三种遍历方式及其特点,解决本题并不复杂,很明显......