构建一个简单的基于 HBase 的搜索引擎

embedded/2024/12/21 2:34:48/

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Python案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:探索水下机器人的半物理仿真:实现与创新的结合

文章目录

      • 引言
        • 1. 项目背景
        • 2. 技术栈
        • 3. 环境准备
        • 4. 爬虫部分
        • 5. 数据存储到 HBase
        • 6. 搜索功能
        • 7. 主程序
      • 总结

引言

在信息时代,数据的快速增长和多样化使得有效的信息检索变得愈发重要。无论是学术研究、商业决策,还是日常生活,能够快速找到所需信息的能力都显得至关重要。搜索引擎作为信息获取的主要工具,已经深入到我们生活的方方面面。

然而,构建一个高效的搜索引擎并非易事。它不仅需要强大的数据存储和处理能力,还需要灵活的爬虫技术来获取最新的信息。HBase 作为一个分布式的 NoSQL 数据库,凭借其高可扩展性和高性能,成为了存储和检索海量数据的理想选择。

本文将带你走进构建一个简单的基于 HBase 的搜索引擎的过程。我们将从网页爬虫开始,逐步实现数据的存储和检索功能,帮助你理解搜索引擎的基本原理和实现方法。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的知识和技巧,助你在信息检索的道路上迈出坚实的一步。

1. 项目背景

随着互联网的快速发展,数据量呈指数级增长。为了有效地从海量数据中提取有用信息,构建一个简单的搜索引擎显得尤为重要。HBase 作为一个分布式、可扩展的 NoSQL 数据库,适合存储和检索大规模数据。

2. 技术栈
  • Java:作为主要编程语言。
  • HBase:用于存储爬取的数据。
  • Jsoup:用于网页爬取和解析。
  • Maven:用于项目管理和依赖管理。
3. 环境准备

在开始之前,请确保你已经安装了以下软件:

  • JDK 1.8 或更高版本
  • Apache Maven
  • HBase(并确保 HBase 服务正在运行)

在你的 Maven 项目中,添加以下依赖:

<dependencies><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.14.3</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.4.9</version></dependency>
</dependencies>
4. 爬虫部分

我们使用 Jsoup 库来爬取网页内容。以下是一个简单的爬虫实现:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;import java.io.IOException;public class WebCrawler {public String crawl(String url) throws IOException {Document doc = Jsoup.connect(url).get();StringBuilder content = new StringBuilder();for (Element element : doc.select("p")) { // 选择所有段落content.append(element.text()).append("\n");}return content.toString();}
}
5. 数据存储到 HBase

接下来,我们将爬取的数据存储到 HBase 中。以下是存储数据的代码:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;public class HBaseStorage {private Connection connection;public HBaseStorage() throws Exception {Configuration config = HBaseConfiguration.create();connection = ConnectionFactory.createConnection(config);}public void saveData(String tableName, String rowKey, String content) throws Exception {Table table = connection.getTable(Bytes.toBytes(tableName));Put put = new Put(Bytes.toBytes(rowKey));put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("content"), Bytes.toBytes(content));table.put(put);table.close();}public void close() throws Exception {connection.close();}
}
6. 搜索功能

最后,我们实现从 HBase 中检索数据的功能:

import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;public class HBaseSearch {private Connection connection;public HBaseSearch(Connection connection) {this.connection = connection;}public String search(String tableName, String rowKey) throws Exception {Table table = connection.getTable(Bytes.toBytes(tableName));Get get = new Get(Bytes.toBytes(rowKey));Result result = table.get(get);byte[] value = result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("content"));table.close();return value != null ? Bytes.toString(value) : null;}
}
7. 主程序

最后,编写主程序来整合这些部分:

public class SimpleSearchEngine {public static void main(String[] args) throws Exception {String url = "http://example.com"; // 替换为你要爬取的URLString tableName = "web_content";String rowKey = "1"; // 可以根据需要生成不同的rowKeyWebCrawler crawler = new WebCrawler();String content = crawler.crawl(url);HBaseStorage storage = new HBaseStorage();storage.saveData(tableName, rowKey, content);storage.close();HBaseSearch search = new HBaseSearch(storage.getConnection());String result = search.search(tableName, rowKey);System.out.println("Search Result: " + result);}
}

总结

通过本文的介绍,我们成功构建了一个简单的基于 HBase 的搜索引擎,涵盖了从网页爬取到数据存储再到信息检索的完整流程。在这个过程中,我们使用了 Java 和 Jsoup 库来实现网页爬虫,利用 HBase 存储和管理爬取的数据,并实现了基本的搜索功能。虽然这个示例相对简单,但它为理解搜索引擎的基本构建原理提供了良好的基础。

未来,您可以在此基础上扩展更多功能,例如支持多页面爬取、增加索引机制、实现更复杂的查询等。随着技术的不断进步,搜索引擎的应用场景也在不断扩展,掌握这些基本技能将为您在数据处理和信息检索领域的深入探索打下坚实的基础。希望本文能激发您对搜索引擎开发的兴趣,并鼓励您在这一领域继续学习和实践。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述


http://www.ppmy.cn/embedded/147413.html

相关文章

SQL, 将分段数不确定的字符串拆分成多列

MSSQL 数据库某表的一个字段是逗号分隔的字符串&#xff0c;字符串数量不定。 A_NUMBERitems1i1,i2,i3,i4,i5,i62j1,j2,j3,j4,j5,i6,i7,i83k1,k2,k345m1 现在要把这个字段拆成 5 个新字段&#xff0c;名字分别是 Srllno1 至 Srllno5&#xff0c;值分别是将原字段拆开后的第 1…

华为HarmonyOS实现跨多个子系统融合的场景化服务 -- 7 地图选点Button

场景介绍 本章节将向您介绍如何使用地图选点Button功能&#xff0c;开发者可调用Button组件拉起Map Kit的地图选点页面&#xff0c;用户在地图中选择位置后&#xff0c;位置相关信息返回Button界面。 说明 该场景暂不支持2in1设备。 前提条件 参见开发准备。 效果图展示 …

如何实现接口继承与实现继承的区别?

接口继承 接口继承是指子类只继承基类的纯虚函数&#xff0c;即只继承基类的接口&#xff0c;而不继承基类的实现&#xff0c;子类必须实现基类中的所有纯虚函数&#xff0c;否则子类也成为抽象类 #include<iostream> using namespace std; // 纯虚类&#xff0c;用作接…

方正畅享全媒体新闻采编系统 reportCenter.do SQL注入漏洞复现

0x01 产品简介 方正畅享全媒体新闻生产系统是以内容资产为核心的智能化融合媒体业务平台,融合了报、网、端、微、自媒体分发平台等全渠道内容。该平台由协调指挥调度、数据资源聚合、融合生产、全渠道发布、智能传播分析、融合考核等多个平台组成,贯穿新闻生产策、采、编、发…

《Posterior Collapse and Latent Variable Non-identifiability》

看起来像一篇很有用的paper&#xff0c;而且还是23年的 没看完 后边看不懂了 Abstract 现有的解释通常将后验崩塌归因于由于变分近似而使用神经网络或优化问题。 而本文认为后验崩塌是潜在变量不可识别性的问题(a problem of latent variable non-identifiability) 本文证明了…

“返家乡”高校暑期社会实践微信小程序设计与开发ssm+论文源码调试讲解

第二章 开发环境 对高校暑期社会实践微信小程序进行开发&#xff0c;需要了解开发技术的理论与实际运用&#xff0c;对开发工具&#xff0c;尤其是数据库的使用方法需要进行掌握。 2.1 SSM框架 SSM框架不是一个框架的名称&#xff0c;而是三个框架的首字母缩写&#xff0c;分…

前端之HTML光速入门

一、HTML基础 &#xff08;1&#xff09;什么是HTML HTML(Hyper Text Markup Language),超文本标记语言. 超文本:比文本更强大.通过链接和交互式方式来组织和呈现信息的文本形式.不仅仅有文本,还可能包括图片,音频,或者自己经审阅过它的学者所加的评注,补充或脚注等. 标记语…

http的MIME类型

在 HTTP 协议中&#xff0c;MIME 类型&#xff08;Multipurpose Internet Mail Extensions&#xff09;用于描述传输内容的类型和格式。MIME 类型通过 Content-Type 头字段来指定&#xff0c;告知客户端如何处理和显示接收到的数据。 常见的 MIME 类型 以下是一些常见的 MIME…