CN110889023A - 一种elasticsearch的分布式多功能搜索引擎 - Google Patents
一种elasticsearch的分布式多功能搜索引擎 Download PDFInfo
- Publication number
- CN110889023A CN110889023A CN201911139989.3A CN201911139989A CN110889023A CN 110889023 A CN110889023 A CN 110889023A CN 201911139989 A CN201911139989 A CN 201911139989A CN 110889023 A CN110889023 A CN 110889023A
- Authority
- CN
- China
- Prior art keywords
- search
- data
- distributed
- elastic
- engine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9535—Search customisation based on user profiles and personalisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于elasticsearch的分布式多功能搜索引擎,包括如下步骤:S1,分布式爬虫构建原始搜索数据集;S2,利用自然语言与图像处理对所爬取到的数据进行清理并***到非关系型数据库;S3,将非关系型数据库中的数据同步到elasticsearch分布式集群及节点中;S4,利用Django网络框架实现前台与elasticsearch的互联完成搜索引擎的搭建。本发明提供的搜索引擎大大提高的搜索的准确性,合理性,增强了用户体验。
Description
技术领域
本发明涉及一种elasticsearch的分布式多功能搜索引擎,属于互联网技术领域。
背景技术
搜索引擎的科学研究价值不仅仅体现在其高技术挑战性,而且表现在其对于整个互联网络乃至民生提供的便捷性和信息高速传达方式,对整个社会的高度的经济促进作用。搜索引擎的研究还只是刚刚的开始,如何在web信息中寻找最符合用户需求的信息展示出来,这不仅在尺度上是空前巨大,而且规范条件也是非常的不确定。及其的***往往是很难判别出用户真正需要的是什么信息的,所以***得到的输入是一个笼统的模糊的概念。
一般而言,普通的搜索引擎只是根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的***。但是这样的***运行效率不高,用关键词检索的结果不是很尽如人意。
发明内容
发明目的:为了克服现有技术的不足,本发明提供了一种基于elasticsearch的分布式多功能搜索引擎。
本发明采用的技术方案为:
一种基于elasticsearch的分布式多功能搜索引擎,具体包括以下步骤:
S1,分布式爬虫构建原始搜索数据集;
使用的分布式爬虫框架主要包括下载器Downloader和解析器Analyzer两个部分。Downloader负责抓取网页,Analyzer负责解析网页并入库。两者之间依靠消息队列MQ进行通信,两者可以分布在不同机器,也可分布在同一台机器。两者的数量也是灵活可变的,具体实现包括以下几个部分:
首先是如何实现不同节点同时运行同一的爬取任务,同一个程序打包后分发到不同的节点运行时,不影响整体的数据爬取,爬取时每个调度器都有其对应的自己的Downloader。在爬取队列保持唯一的情况下,即共享爬取队列。其中的核心包括网页的下载、解析与随机IP代理器。
网页的下载与解析:网页的下载是基于downloader封装完成的下载器,解析是将所需数据解析出来,并保存到某个对象中,供数据存储器进一步处理以保存到不同的持久化仓库中。
随机IP代理器:我们选用高性能的proxy server http代理服务器,突破自身ip访问限制,隐藏自身真实ip并提高爬取速度。在爬取过程中,当所爬取的网站对当前节点禁止访问时,立即从代理池中取出另一个代理服务器进行高性能爬取。
数据的存储:通过pipeline,downloader_middlewares的配置以及数据库基本信息配置,实现存储到数据库的item pipeline,启用pipeline后,分布式爬虫会将该爬取队列中的爬取设计好的item存储到对应的mysql数据库中。
其次是要借用调度器Scheduler实现URL的优先队列的构建,调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎确定爬取顺序,最后审核删去重复数据
此处使用Redis与Scrapy的Scheduler组合实现一个URL仓库,即在***中使用Redis来保存并维护我们的url地址列表,只要保存了url是唯一的,这样不管爬虫程序有多少个,最终保存下来的数据都是按照预定好的优先度进行爬取。
借助redis的集合实现去重。redis提供集合数据结构,在redis集合中存储每个request的指纹,在向request队列中加入Request前先验证这个Request的指纹是否已经加入集合中。如果已经存在则不添加到request队列中,如果不存在,则将request加入到队列并将指纹加入集合。
同时为了预防中断或者因为特殊原因宕机,设计了启动判断机制。scrapy-redis改写了Scrapy的调度器,队列等组件,在每台节点的Scrapy启动的时候都会判断当前redisrequest队列是否为空。如果不为空,则从队列中获取下一个request执行爬取。如果为空则重新开始爬取,同时第一台丛集执行爬取向队列中添加request。
S2,利用自然语言与图像处理对所爬取到的数据进行清理并***到非关系型数据库;
S3,将非关系型数据库中的数据同步到elasticsearch分布式集群及节点中;
向elasticsearch传输已经清洗好的数据,利用python连接好elasticsearch和mongodb数据库,将mongodb数据库中的信息全部同步到elasticsearch中对应的集群中。
S4,利用Django网络框架实现前台与elasticsearch的互联完成搜索引擎的搭建。
为了获取高精度的数据的快速检索,采取了fuzzy模糊搜索即模糊哈希算法兼容在elasticsearch框架之中。
模糊哈希算法是基于哈希算法的,和哈希算法的不同点在于,哈希算法是将整个文件作为定义域来求算结果,而模糊哈希算法则是先对文件进行分块,计算每一块的哈希值,然后将得到的一系列哈希值利用比较函数于其他哈希值进行比较,来确定相似程度。
包括以下过程:
S41,将计算对象分块;
S42,对每个分块分别计算哈希,并进行比较。
由于先对文件进行了分块,因此仅仅对某一部分进行修改只会导致某一或某几个分块的哈希值发生变化,而其他分块的哈希值并不变化,通过对比就可以很容易发现相似性,所以在搜索的精确度不会受到关键字的缺省而降低。
同时,为了使查询匹配更灵活,不同问题域下搜索更具体,在使用Fuzzy模糊搜索算法的同时,面对特殊待处理数据,也会使用特殊的搜索方式进行处理。比如面对日期、时间和数字等结构化数据,可以使用结构化查询来进行非是即否(要么存于集合之中,要么存在集合之外)的判断;在面对需要相似的字符串查询多个字段的情况,需要对查询语句以及它们的相关度评分进行合理的合并。
有益效果:
1.本发明所使用的分布式爬虫scrapy配合高性能proxy代理服务器,对URL队列进行分布式爬取,形成对应的item管道,并发存入数据库中。
2.本发明所使用的elasticsearch可以实现高扩展的分布式全文检索,实现近乎实时检索数据,期中的集群每个数据节点都可以分成一个或多个分片,协调操作。
3.本次发明所使用的fuzzy模糊算法对拼写错误的文本就行纠正,并且纠正后匹配索引中的数据,大大提高的搜索的准确性,合理性,增强了用户体验。
附图说明
图1为本发明的流程图;
图2为elasticsearch集群和节点关系图。
具体实施方式
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
实施例:
如图1所示,一种基于elasticsearch的分布式多功能搜索引擎,具体包括以下步骤:
第一步:分布式爬虫构建原始搜索数据集
本发明的搜索引擎主要的数据来源是大型论坛和已有的常用引擎,使用的分布式爬虫是基于scrapy框架来实现对大型数据的快速实时的获取与保存,同时实现数据的去重和相关性判断来进行分类。通对多个节点对网站的实时信息的爬取可以保证我们的数据涵盖面广不遗漏。
本发明所爬取的网站有知乎、求职网、技术博客等等,内容涉及文本,图片等等。由于一些网站有很好的反爬虫机制,所以我们运用高性能proxy代理器,隐藏本身ip地址,突破反爬虫限制,对这些网站信息进行实时抓取。
第二步:利用自然语言与图像处理对所爬取到的数据进行清理并***到非关系型数据库。
使用pymysql包将所得到的数据***到mysql关系型数据库中,在这一步中调用线程池dbpool进行异步***数据:
query = self.dbpool.runInteraction(self.insert, item)
此操作可以加速数据存储的速度,并且可以防止数据混乱。错位等,
第三步:将数据库中的数据同步到elasticsearch分布式集群及节点中
是进行数据信息并***到MongoDB非关系型数据库,对数据进行预处理操作,主要包括对文段信息的概括与关键字提取,垃圾信息与评论的识别并自动删除,最后进行相关信息的关联存储,使得后面的搜索环节更加快速;对于收集到的图片信息,可以利用已有的模型对各个图片进行识别判断,并对一些低对比度或者劣质图片自动删除,并对图片与相应文字进行统一归类;对于收集到的音频,尤其是音乐部分,可以对其频率特点进行分析回归,将其粗分类为各个大致种类的派别。
MongoDB 是一个基于分布式文件存储的数据库。可以为程序提供可扩展的高性能数据存储解决方案,在本发明中,可以实现数据的高速存储及迁移,将清洗好的数据迁移到其中。
数据同步利用mongoDB-python- elasticsearch三者互联进行同步,利用python连接mongoDB相应的数据库及对应的索引,连接elasticsearch的地址及端口号,遍历数据库中的数据并加载到elasticsearch对应的集群及节点中。
最后一步是利用Django网络框架实现前台与elasticsearch的互联,并最终完成对搜索引擎的搭建。
Django 是一个高级的Python 网络框架,在开发安全和可维护网站方面很有优势,几乎可以构建任何类型的网站,并且django的可扩展性、可维护性、可移植性也比较高,所以我们选择基于python的django框架来搭建搜索引擎。
如图2所示:
node-master为主节点,集群中用于元数据(metadata)的请求处理,比如确定分片位置,索引的新增、删除请求分配等。
Shards为分片,在设置索引时默认或自己设置的分片数量,即indices(1)--shards(n),而每***一条数据都会在唯一主分片中。
在实现搜索时利用fuzzy模糊算法:
"""fuzzy模糊搜索, fuzziness 编辑距离, prefix_length前面不变化的前缀
长度"""
s = s.suggest('my_suggest', key_words, completion={
"field": "suggest", "fuzzy": {
"fuzziness": 2
},
"size": 10
})
使用此算法可以自动纠正拼写错误的搜索文本,并且纠正后会尝试匹配索引中的数据,并且纠正在一定范围内可以将差别不大的搜索出来。提升用户体验。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (4)
1.一种基于elasticsearch的分布式多功能搜索引擎,其特征在于包括如下步骤:
S1,分布式爬虫构建原始搜索数据集;
S2,利用自然语言与图像处理对所爬取到的数据进行清理并***到非关系型数据库;
S3,将非关系型数据库中的数据同步到elasticsearch分布式集群及节点中;
S4,利用Django网络框架实现前台与elasticsearch的互联完成搜索引擎的搭建。
2.根据权利要求1所述的一种elasticsearch的分布式多功能搜索引擎,其特征在于所述步骤S1中使用的分布式爬虫框架包括下载器Downloader和解析器Analyzer;Downloader负责抓取网页,Analyzer负责解析网页并入库,两者之间依靠消息队列MQ进行通信,具体包括如下步骤:
(2-1)实现不同节点同时运行同一的爬取任务
同一个程序打包后分发到不同的节点运行时,不影响整体的数据爬取,爬取时每个调度器都有其对应的自己的Downloader,在爬取队列保持唯一的情况下,即共享爬取队列;
(2-2)借用调度器Scheduler实现URL的优先队列的构建,调度器从引擎接受request并将他们入队,用于之后引擎请求他们时提供给引擎确定爬取顺序,最后审核删去重复数据。
3.根据权利要求1所述的一种elasticsearch的分布式多功能搜索引擎,其特征在于所述步骤S3的具体包括:
向elasticsearch传输已经清洗好的数据,利用python连接好elasticsearch和mongodb数据库,将mongodb数据库中的信息全部同步到elasticsearch中对应的集群中。
4.根据权利要求1所述的一种elasticsearch的分布式多功能搜索引擎,其特征在于所述步骤S4中,为了获取高精度的数据的快速检索,采取fuzzy模糊搜索即模糊哈希算法兼容在elasticsearch框架之中;
包括以下过程:
S41,将计算对象分块;
S42,对每个分块分别计算哈希,并进行比较。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911139989.3A CN110889023A (zh) | 2019-11-20 | 2019-11-20 | 一种elasticsearch的分布式多功能搜索引擎 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911139989.3A CN110889023A (zh) | 2019-11-20 | 2019-11-20 | 一种elasticsearch的分布式多功能搜索引擎 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110889023A true CN110889023A (zh) | 2020-03-17 |
Family
ID=69748003
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911139989.3A Withdrawn CN110889023A (zh) | 2019-11-20 | 2019-11-20 | 一种elasticsearch的分布式多功能搜索引擎 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110889023A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111859073A (zh) * | 2020-07-27 | 2020-10-30 | 广西美立方工程咨询有限公司 | 基于Python的非结构化数据实时爬取***以及其使用方法 |
CN112163137A (zh) * | 2020-09-02 | 2021-01-01 | 北京神鹰城讯科技股份有限公司 | 一种基于数据采集和信息抽取的房屋租赁信息搜索方法 |
CN113162818A (zh) * | 2021-02-01 | 2021-07-23 | 国家计算机网络与信息安全管理中心 | 一种分布式流量采集分析的实现方法及*** |
CN113190737A (zh) * | 2021-05-06 | 2021-07-30 | 上海慧洲信息技术有限公司 | 一种基于云平台的网站信息采集*** |
CN114780820A (zh) * | 2022-04-28 | 2022-07-22 | 广州高专资讯科技有限公司 | 一种基于开源平台的目标匹配***及方法 |
CN118012952A (zh) * | 2024-02-02 | 2024-05-10 | 广州今之港教育咨询有限公司 | 一种数据处理方法和装置、电子设备及存储介质 |
-
2019
- 2019-11-20 CN CN201911139989.3A patent/CN110889023A/zh not_active Withdrawn
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111859073A (zh) * | 2020-07-27 | 2020-10-30 | 广西美立方工程咨询有限公司 | 基于Python的非结构化数据实时爬取***以及其使用方法 |
CN112163137A (zh) * | 2020-09-02 | 2021-01-01 | 北京神鹰城讯科技股份有限公司 | 一种基于数据采集和信息抽取的房屋租赁信息搜索方法 |
CN113162818A (zh) * | 2021-02-01 | 2021-07-23 | 国家计算机网络与信息安全管理中心 | 一种分布式流量采集分析的实现方法及*** |
CN113190737A (zh) * | 2021-05-06 | 2021-07-30 | 上海慧洲信息技术有限公司 | 一种基于云平台的网站信息采集*** |
CN113190737B (zh) * | 2021-05-06 | 2024-04-16 | 上海慧洲信息技术有限公司 | 一种基于云平台的网站信息采集*** |
CN114780820A (zh) * | 2022-04-28 | 2022-07-22 | 广州高专资讯科技有限公司 | 一种基于开源平台的目标匹配***及方法 |
CN114780820B (zh) * | 2022-04-28 | 2022-11-01 | 广州高专资讯科技有限公司 | 一种基于开源平台的目标匹配***及方法 |
CN118012952A (zh) * | 2024-02-02 | 2024-05-10 | 广州今之港教育咨询有限公司 | 一种数据处理方法和装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110889023A (zh) | 一种elasticsearch的分布式多功能搜索引擎 | |
JP6006267B2 (ja) | 索引キーを使用して検索を絞込むシステムおよび方法 | |
US7788253B2 (en) | Global anchor text processing | |
US9342553B1 (en) | Identifying distinct combinations of values for entities based on information in an index | |
US8862588B1 (en) | Generating an empirically-determined schema for a schemaless database | |
US8027974B2 (en) | Method and system for URL autocompletion using ranked results | |
US8812493B2 (en) | Search results ranking using editing distance and document information | |
US9122769B2 (en) | Method and system for processing information of a stream of information | |
US8396852B2 (en) | Evaluating execution plan changes after a wakeup threshold time | |
CA2790421C (en) | Indexing and searching employing virtual documents | |
US9984166B2 (en) | Systems and methods of de-duplicating similar news feed items | |
US9275128B2 (en) | Method and system for document indexing and data querying | |
US8423885B1 (en) | Updating search engine document index based on calculated age of changed portions in a document | |
US10678784B2 (en) | Dynamic column synopsis for analytical databases | |
US11514697B2 (en) | Probabilistic text index for semi-structured data in columnar analytics storage formats | |
RU2733482C2 (ru) | Способ и система для обновления базы данных поискового индекса | |
CN111522905A (zh) | 一种基于数据库的文档搜索方法和装置 | |
KR101651780B1 (ko) | 빅 데이터 처리 기술을 이용한 연관 단어 추출 방법 및 그 시스템 | |
EP3480706A1 (en) | Automatic search dictionary and user interfaces | |
Barrio et al. | Sampling strategies for information extraction over the deep web | |
US9390131B1 (en) | Executing queries subject to different consistency requirements | |
Deng et al. | Information re-finding by context: A brain memory inspired approach | |
Soulemane et al. | Crawling the hidden web: An approach to dynamic web indexing | |
US10380195B1 (en) | Grouping documents by content similarity | |
Mahmud et al. | A framework for dynamic indexing from hidden web |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20200317 |
|
WW01 | Invention patent application withdrawn after publication |