首页 > 其他分享 >爬虫-今日头条我的收藏-增量式导入到Elastic Search(四)

爬虫-今日头条我的收藏-增量式导入到Elastic Search(四)

时间:2024-03-29 23:23:26浏览次数:16  
标签:导入到 Search Elastic 记录 mongodb 插入 json 导入 id

背景:

继成功导入输入数据到mongodb,sqlite3之后,发现了一些问题,(写到此处觉得还是有些地方没有去深入的学习可能mongodb已经有解决方案了?):

  • 对关键字查询支持不友好,如果要在sql中拆分出不同的关键字sql会比较麻烦。
  • 另外排序不友好,如何把最匹配的记录放在最前面?

elasticsearch是对搜索专门支持的文档数据库,对于搜索功能支持很友好,于是尝试了一把增量式导入到ES的功能。

 

增量式导入:

  • 用户会不断有新的收藏信息进入到数据库。
  • 导入的过程中,可能会出现意外导致进行到一半不得不退出。下次导入的时候,需要知道最后导入的记录是哪条,然后接着继续导入。
  • 可以复用mongodb、sqlite3部分的代码,对代码做了重构。有一个基础类DBImporter可以帮做文件解析,断点定位的共享逻辑。

 

方案:

为了支持增量式导入,必须要遭到最后一条插入数据库的记录,sqlite3/mongodb轻易而,但是对于es来说就有问题,无法找到最后一条记录是哪条,需要有一个自增的字段来记录。通过这个最大的id来找到最后一条。

尝试了两个方案,都可以做到,最终选择方案2:

  1. 插入记录中自带_id由一个uuid作用的字符串变成一个自增的数字。这样的好处是不用新增加字段,坏处是破坏了_id字段原本的作用。
  2. 增加一个叫increasement_id字段。好处是克服了方案1的缺陷,相应的代码量要增加一点。

 

遇到的问题:

  • 一条一条的插入记录很慢的,需要批量插入。改成批量就很快了。
  • 插入记录的过程中,有可能有超时的异常,需要设置重试。
  • content字段有可能是字符串,也有可能是json对象。mapping已经自动识别为字符串类型,再插入json对象的时候就会异常退出。对于该问题的解决是把json转化成字符串。mongodb以及sqlite3没有遇到。需要在查询的时候,str需要被转化成json对象。

 

参考代码:https://gitee.com/pmh905001/myfavorite/blob/master/toutiao/esimporter.py

 

标签:导入到,Search,Elastic,记录,mongodb,插入,json,导入,id
From: https://www.cnblogs.com/pmh905001/p/18104826

相关文章

  • ElasticSearch搜索引擎介绍+性能监控及调优
    ElasticSearch搜索引擎介绍一、概述搜索在现代日常生活场景中都非常常见,如百度、京东、天猫等等。数据量都是庞大的,所以直接基于数据库搜索必定不是他们的首选,在这些场景下,要完成数据的高效搜索,都会基于搜索引擎实现。而对于搜索实现来说,市面上常见三种技术:Lucene、Solr......
  • elasticsearch基础使用
    索引操作mapping映射属性type:字段数据类型,字符串:text(可分词的文本),keyword(精确值,不可以分词的文本)如下图,邮箱就是keyword,名字就是tex数值:long,integer,short,byte,double,float布尔:boolean日期:dateindex:是否创建倒排索引,默认是trueanalyzer:使用哪种分词器properti......
  • docker search xxx出现报错:docker 报错Error response from daemon: x509:
    问题可能出现在daemon.json配置文件1、打开此文件:vi/etc/docker/daemon.json,把境像地址换成:https://docker.mirrors.ustc.edu.cn  2、然后重启服务器:reboot(或者重启docker使用daemon.json配置文件生效也行)  重启后可以成功搜索了,随便搜索个tomcat吧:dockersearch......
  • Elasticsearch入门及常用命令和Spring中的常用操作
    入门官网简介一个分布式的、Restful风格的搜索引擎。支持对各种类型的数据的检索。搜索速度快,可以提供实时的搜索服务。便于水平扩展,每秒可以处理PB级海量数据。常用术语索引:与MySQL数据库中的Database相对应类型:与MySQL数据库中的Table相对应文档:相当于MySQL中的一......
  • springboot 集成elasticsearch Ik分词
    前提是我们elasticsearch服务已经集成了IK分词,具体集成下载对应的elasticsearchIK分词插件,在es插件包下创建IK文件夹,将下载好的IK包上传上去解压后重启es1、pom引入co.elastic.clientselasticsearch-java7.16.2jakarta.jsonjakarta.json-api2.0.1org.springframew......
  • ElasticSearch的搜索相关操作
    1、基本介绍Elasticsearch的查询是基于JSON风格的DSL(DomainSpecificLanguage)来实现的。常见的查询类型包括:查询所有:查询出所有数据,一般测试用。例如:match_all全文检索(fulltext)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:match、multi_match精确......
  • 二进制部署elasticsearch集群
    部署elasticsearch7.17.3版本背景:  业务有需求看evenet事件,由于etcd集群中的eventkey频繁打到200w+,对etcd集群压力非常大,每次都需要手动删除eventkey,非常耗时间,而且风险特别好,恢复时间慢等缺点。解决方案:  1,拆分etcd集群中的eventkey,在本机上创建一个新的etcd集群,......
  • [669] Trim a Binary Search Tree
    极其少有的我决定自己来写一篇。我就是个脑残真的,我还在想要不要一个个pop,结果忘了这是一个BST……妈个鸡附上我的傻逼代码/**@lcapp=leetcode.cnid=669lang=cpp**[669]TrimaBinarySearchTree*/#include"General.h"structTreeNode{intval;Tr......
  • Elasticsearch 8.x以上实现初始化用户密码,elasticsearch-setup-passwords interactive
    Elasticsearch8.x以上,默认自动开启x-pack验证,在首次启动时,会设置密码,当再次执行elasticsearch-setup-passwordsinteractive就会报错,提示使用elasticsearch-reset-passwords,但是用户太多,还是想要能像8.x以下一直敲回车,设置密码。今天偶然Elasticsearch报错,发现一个方法可以使用,......
  • elasticsearch esrally 性能测试实操
    目录准备数据docker测试环境准备正式测试最新在用esrally测试es的性能,今天把相关操作记录下。本人非专业测试,各位大佬请轻喷。关于esrally的文档,请移步:esrally测试esrally是个elastic官方的测试工具,可以对es进行压力测试。其运行对环境有一定要求,如python版本,JDK......