Elasticsearch:如何创建搜索引擎

作者:Jessica Taylor

搜索引擎是生活中我们认为理所当然的事情之一。 每当我们寻找某些东西时,我们都会将一个单词或短语放入搜索引擎,就像魔术一样,它会为我们提供一个匹配结果列表。 现在可能感觉不那么神奇了,因为这是我们每天都在做的事情。 但任何记得 Alta Vista 时代的人都应该明白我们现在的情况有多好。

当我说 “搜索引擎” 时,很容易想到流行的网络搜索引擎,例如 Google 以及在较小程度上上的 Bing。 但搜索引擎的应用远远超出了搜索网络的范围。 Uber 和 Tinder 等热门应用程序包含强大的搜索引擎,可利用其平台独有的地理位置和其他特征将用户与司机和日期进行匹配。 这对于流媒体应用程序、学术网站甚至内部网来说都是一样的。 事实上,如果你查看任何主要网站的导航栏,你很可能会看到一个搜索栏,可以帮助你从该特定网站找到你需要的内容。

搜索引擎的潜在用例数量巨大,这可能就是你阅读本文的原因。 也许你是一名开发人员,希望构建你的第一个搜索引擎。 或者你可能意识到搜索通过检索增强生成来增强生成式 AI 体验,并且想了解更多信息。 为了使这尽可能简单,我们将本指南分为三个部分:

  • 搜索引擎的定义和概念
  • 创建你自己的搜索引擎
  • 使用 Elastic® 轻松构建搜索引擎

读完本文后,你将掌握使用 Web 服务器、数据摄取和索引构建第一个搜索引擎所需的所有知识,并由 Elastic 的搜索平台提供支持。

搜索引擎的定义和概念

将搜索引擎视为图书管理员,帮助你找到所需的信息。 你告诉他们你要解决的问题或你要回答的问题,图书管理员可以向你推荐最有可能对你有帮助的书籍和资源。 他们可能并不总是能做对,但这比盲目地翻阅书籍以期获得幸运要有效得多。

搜索引擎由四个主要组件组成:网络服务器数据摄取索引结果页面。 在构建搜索引擎之前,了解它们各自的作用非常重要。

网络服务器

如果搜索引擎是图书馆员,那么网络服务器就是图书馆本身。 你可以在此处存储向用户返回有意义的结果所需的所有数据。 这些 Web 服务器通常基于云,因为它们为你提供了可扩展性、可访问性、安全性和性能。 对于网络搜索引擎来说,这将是跨不同网站的 HTML 页面、图像、视频和其他资产的位置。 对于社交媒体网站,这将是该平台上内容所需的标题、描述、元数据和其他信息。

数据摄取

就像图书馆需要整理和收集不同的书籍一样,搜索引擎需要从某个地方收集数据。 这就是为什么数据摄取是构建搜索引擎如此重要的一部分。 对于网络搜索引擎,此数据摄取是使用网络爬虫完成的。 爬虫使用复杂的算法来扫描网站并识别内容是什么以及在哪里可以找到内容。

通过 API 与其他服务集成是另一种类型的数据摄取。 这些集成使你可以选择数据的来源,从而使你的搜索引擎能够更好地查找特定数据。 例如,如果你正在构建视频搜索引擎,你可能希望显示来自多个提供商(例如 YouTube、Netflix 和 Disney+)的结果。

同样,你可以使用连接器从一个或多个数据源引入信息。 这些通常是预构建的模块或代码片段,可用于连接到特定的数据库、应用程序或 API。 它们为你提供了足够的灵活性,而无需将你的范围扩大得太远。

索引

就像在图书馆一样,你需要有一个内容索引,否则将不可能知道所有内容在哪里。 索引通过组织和存储数据源中的信息来实现此目的,以确保可以有效地检索这些信息。 为了让你的搜索引擎正常工作,它需要能够快速识别、排名和提供内容。

因为你可能尝试对大量数据建立索引,所以不能简单地从源逐字复制该索引。 相反,索引需要处理这些内容,将其分解为关键元素,例如:

  • 关键词:页面上找到的单词和短语
  • 嵌入:表示文本数据的多维向量
  • 元数据:标题、描述和页面中嵌入的其他结构化数据
  • 内容分析:了解页面的主题、实体和整体含义
  • 反向链接:来自其他网站的指向内容的链接

搜索引擎结果页面 (search enginer results pages - SERP)

这个难题的最后一部分实际上是向用户显示搜索结果。 搜索引擎结果页面承担了你在服务器、数据摄取和索引方面所做的所有艰苦工作,最终形成一个有用结果列表供用户选择。

其外观因搜索引擎而异,但你可能会在 SERP 上有标题、链接、描述和某种分页。 你可能还拥有更高级的过滤和分面,因此用户可以根据常用参数轻松优化结果。 但重要的是结果会清晰显示,因此很容易找到最佳、最相关的选择。

你的搜索相关性很重要,因为它可以通过向用户展示你了解他们的意图来培养信任,并确保他们走在正确的道路上。 这最终引导他们无缝地获取他们想要的信息 —— 这种结合可以建立忠诚度并促进持久的参与。

使用 Elastic 创建你自己的搜索引擎

现在你已经更好地了解了搜索引擎的关键组件,让我们深入了解构建你自己的搜索引擎的过程以及你可能面临的挑战。

首先,你需要考虑搜索引擎的规模。 瞄准明星并尝试建立新的谷歌可能很诱人。 但抓取数十亿个网页需要大量的基础设施和计算能力,更不用说存储所有数据的能力了。

在开始构建之前,你还应该牢记你现有的知识和技能。 你对数据源了解得越多,就越容易将其用于搜索引擎。 同样,尝试坚持使用你已经有经验的技术堆栈。 如果你精通 Python,请考虑使用它来构建你的搜索引擎。

第 1 步:定义你的搜索要求

构建搜索引擎的第一步是确定搜索引擎要解决的问题。 这个决定将影响你要构建的所有其他内容,从数据源到索引,再到显示结果的方式。 因此,请考虑一下你正在为谁构建搜索引擎,并问自己以下问题:

  • 他们为什么要寻找这些信息/内容?
  • 你需要了解哪些信息才能确定某件事是否相关?
  • 你将如何决定哪些结果比其他结果更好?
  • 你将如何呈现结果以使其尽可能有用?

一旦回答了这些问题,你将能够更好地在整个构建过程中做出关键决策 - 从使用哪些数据源到是否应该在搜索引擎结果页面上显示图像。 你心中的这些答案越清晰,你就越能满足用户的需求和期望。

第 2 步:抓取网络以提取数据

一旦你知道搜索引擎的要求是什么,下一步就是获取你需要的数据。 如果你计划使用集成或连接器,则需要访问这些源并确保你可以在需要索引时访问数据。 如果数据源属于你,那么这应该不成问题。 但请记住,任何外部数据源都会带来一些风险。 数据源的所有者可以随时撤销访问权限或对数据进行更改,这可能会导致出现一些问题。 你可以安排数据刷新来解决此问题,但如果数据的结构或体系结构发生更改,仍然可能会导致问题。

如果你要创建网络搜索引擎,则需要使用网络爬虫来获取要索引的数据。 这所需的时间完全取决于你的搜索引擎的范围。 理论上,你可以构建自己的爬虫,但这需要大量工作。 相反,使用现有工具(例如 Elastic 网络爬虫)会更快、更容易。 这将扫描你喜欢的任何网站,并且你可以安排自动重新爬网,以便你的搜索引擎始终保持最新。

第三步:存储收集到的信息

无论你使用爬虫程序、API 还是连接器,都没有关系 — 你仍然需要某个地方来存储收集到的信息。 但你不应该急于选择任何旧数据库。 你需要考虑数据量和增长、性能要求、数据结构、可扩展性、可靠性、安全性和分析等因素。 你还需要考虑短期和长期存储这些数据的成本。

正如我们之前提到的,考虑你自己的技能也很有用。 例如,如果你之前在开发中主要使用 Elasticsearch®,那么这可能是你现在的最佳选择。 但是,如果你对几种不同类型的数据库感到满意,则应该根据上面列出的因素做出决定。

步骤 4:索引页面

你需要做的下一件事是对你收集和存储的数据建立索引。 这将让你为用户提供与其查询最相关的结果。 幸运的是,索引是 Elastic 网络爬虫的一部分,这将使你的生活更轻松。 但在配置索引结构时,你仍然需要考虑数据粒度、属性索引和数据压缩等问题。

过程中可能会出现一些尝试和错误,但目标应该是帮助用户:

  • 快速查找相关信息
  • 优化搜索和过滤结果
  • 发现相关内容

使用开箱即用的搜索 UI 将使这一切变得更加容易,因为你可以快速启动并运行搜索引擎 UI。 这使你能够测试你的搜索引擎、检查索引并进行调整和更改以改进你的搜索引擎。 这包括过滤和排序、分页和键入时搜索等功能。

第 5 步:优化搜索结果

构建任何搜索引擎的最终目标是提供最有用和最相关的结果。 但你不太可能一开始就能做到这一点。 相反,你需要不断努力完善你的搜索引擎,以更接近实现该目标。 关键词匹配、向量数据库、混合搜索技术、相关性评分、链接分析和同义词等都可以带来很大的改进。

你还可以利用机器学习和人工智能来增强你的搜索能力。 这可以使你的搜索引擎更加强大,因为它可以从用户行为中学习,包括更高级的个性化,甚至可以更好地理解用户的意图和语气。 不过,这确实也带来了挑战。 你需要确保偏见不会渗透到你的搜索引擎中,并且你需要非常重视隐私和安全。

构建搜索引擎变得容易

构建你的第一个搜索引擎可能感觉像是一项艰巨的任务,但希望这些步骤已经向你表明它实际上是可以实现的。 Elastic 可以帮助完成该过程的每一步。 它通过网络爬虫等工具简化了数据摄取,通过其可扩展且灵活的架构增强了索引功能,并通过其机器学习功能增强了相关性。

无论你是构建网站搜索还是专门的搜索引擎,Elasticsearch 都会为你提供一套全面的工具,帮助你从头开始创建高效且用户友好的搜索体验。

接下来你应该做什么

只要你准备好,我们可以通过以下四种方式帮助你为你的企业带来更好的搜索体验:

  • 开始免费试用,看看 Elastic 如何帮助你的业务。
  • 浏览我们的解决方案,了解 Elasticsearch 平台的工作原理以及我们的解决方案如何满足你的需求。
  • 通过我们 45 分钟的网络研讨会,了解如何设置 Elasticsearch 集群并开始数据收集和摄取。
  • 通过电子邮件、LinkedIn、Twitter 或 Facebook 与你认识的愿意阅读本文的人分享本文。

原文:How to create a search engine | Elastic Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/424868.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CSS】(标准流部分)易忘知识点汇总

一、元素 块元素 常见的块元素&#xff1a; <h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>行内元素 常见的行内元素&#xff1a; <a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins&…

卷积神经网络CNN

图像基础知识 图像是由像素点组成的&#xff0c;每个像素点的取值范围为 : [0, 255] 。像素值越接近于 0 &#xff0c;颜色越暗&#xff0c;接近于黑色&#xff1b;像素值越接 近于255 &#xff0c;颜色越亮&#xff0c;接近于白色。 在深度学习中&#xff0c;我们使用的图像…

图神经网络实战——图论基础

图神经网络实战——图论基础 0. 前言1. 图属性1.1 有向图和无向图1.2 加权图和非加权图1.3 连通图和非连通图1.4 其它图类型 2. 图概念2.1 基本对象2.2 图的度量指标2.2 邻接矩阵表示法 3. 图算法3.1 广度优先搜索3.2 深度优先搜索 小结系列链接 0. 前言 图论 (Graph theory) …

@Transactional--开启事物后换源报错

一、问题出现的场景 系统架构设计、每个企业一个企业库、通过数据源切在平台库、和企业库之间动态切换完成业务操作。 二、跨库事物失效的原因 1、SpringTransactional不支持跨数据源事物&#xff0c;Spring 事物控制是基于数据库链接进行的&#xff0c;当数据源切换后&#x…

Python算法题集_单词搜索

Python算法题集_单词搜索 题22&#xff1a;单词搜索1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【原始矩阵状态回溯】2) 改进版一【字典检测原始矩阵状态回溯】3) 改进版二【矩阵状态回溯】 4. 最优算法5. 相关资源 本文为Python算法题集之一…

【Datawhale组队学习:Sora原理与技术实战】Attention

Attention Attention 注意力&#xff0c;从两个不同的主体开始。 论文&#xff1a;https://arxiv.org/pdf/1703.03906.pdf seq2seq代码仓&#xff1a;https://github.com/google/seq2seq 计算方法&#xff1a; 加性Attention&#xff0c;如&#xff08;Bahdanau attention&…

electron-release-server部署electron自动更新服务器记录

目录 一、前言 环境 二、步骤 1、下载上传electron-release-server到服务器 2、宝塔新建node项目网站 3、安装依赖 ①npm install ②安装并配置postgres数据库 ③修改项目配置文件 ④启动项目 ⑤修改postgres的认证方式 ⑥Cannot find where you keep your Bower p…

Sqli-labs靶场第12关详解[Sqli-labs-less-12]

Sqli-labs-Less-12 #手工注入 post传参了 根据题目看&#xff0c;像一个登录页面&#xff0c;尝试使用布尔型盲注测试能否登录网站 1. Username输入a a" 测试是否会有报错&#xff0c;burp抓包 报错&#xff1a;syntax to use near "a"") and passw…

【风格迁移】pix2pixHD:高分辨率图像生成

pix2pixHD&#xff1a;高分辨率图像生成 提出背景问题1: 如何提高生成图像的照片级真实感和分辨率&#xff1f;问题2: 如何利用实例级别的对象语义信息进一步提高图像质量&#xff1f;问题3: 如何实现图像合成的多模态性&#xff0c;允许交互式对象编辑&#xff1f; pix2pixHD …

Vue3中Vuex状态管理库学习笔记

1.什么是状态管理 在开发中&#xff0c;我们会的应用程序需要处理各种各样的数据&#xff0c;这些数据需要保存在我们应用程序的某个位置&#xff0c;对于这些数据的管理我们就称之为状态管理。 在之前我们如何管理自己的状态呢&#xff1f; 在Vue开发中&#xff0c;我们使用…

02、MongoDB -- MongoDB 的安全配置(创建用户、设置用户权限、启动安全控制、操作数据库命令演示、mongodb 的帮助系统介绍)

目录 MongoDB 的安全配置演示前准备&#xff1a;启动 mongodb 服务器 和 客户端 &#xff1a;1、启动单机模式的 mongodb 服务器2、启动 mongodb 的客户端 MongoDB 的安全配置启动演示用到的 mongodb 服务器 和 客户端启动单机模式的 mongodb 服务器&#xff1a;启动 mongodb 的…

光学遥感卫星分辨率的奥秘 !!

文章目录 前言 1、光学遥感卫星分辨率的多维视角 &#xff08;1&#xff09;空间分辨率 &#xff08;2&#xff09;光谱分辨率 &#xff08;3&#xff09;辐射分辨率 &#xff08;4&#xff09;时间分辨率 2、光学遥感分辨率的重要性 3、遥感分辨率的挑战与进步 4、未来展望 总…

《Spring Security 简易速速上手小册》第7章 REST API 与微服务安全(2024 最新版)

文章目录 7.1 保护 REST API7.1.1 基础知识详解7.1.2 重点案例&#xff1a;使用 JWT 进行身份验证和授权案例 Demo 7.1.3 拓展案例 1&#xff1a;API 密钥认证案例 Demo测试API密钥认证 7.1.4 拓展案例 2&#xff1a;使用 OAuth2 保护 API案例 Demo测试 OAuth2 保护的 API 7.2 …

【2024】利用python爬取csdn的博客用于迁移到hexo,hugo,wordpress...

前言 博主根据前两篇博客进行改进和升级 利用python爬取本站的所有博客链接-CSDN博客文章浏览阅读955次&#xff0c;点赞6次&#xff0c;收藏19次。定义一个json配置文件方便管理现在文件只有用户名称,后续可加配置读取用户名称&#xff0c;并且将其拼接成csdn个人博客链接ty…

OpenChat:性能高达105.7%,第一个超越ChatGPT的开源模型?

OpenChat&#xff1a;性能高达105.7%&#xff0c;第一个超越ChatGPT的开源模型&#xff1f; 前几天开源模型第一还是是Vicuna-33B、WizardLM&#xff0c;这不又换人了。对于开源模型的风起云涌&#xff0c;大家见怪不怪&#xff0c;不断更新的LLM榜单似乎也没那么吸引人了。 …

数学建模【因子分析】

一、因子分析简介 因子分析由斯皮尔曼在1904年首次提出&#xff0c;其在某种程度上可以被看成是主成分分析的推广和扩展。 因子分析法通过研究变量间的相关系数矩阵&#xff0c;把这些变量间错综复杂的关系归结成少数几个综合因子&#xff0c;由于归结出的因子个数少于原始变…

C/C++工程师面试题(数据库篇)

索引的优缺点 索引是一种支持快速查找特定行的数据结构&#xff0c;如果没有索引&#xff0c;就需要遍历整个表进行查找。用于提高数据检索的速度和效率。 好处&#xff1a; 提高检索速度&#xff1a; 索引可以加快数据的检索速度&#xff0c;因为它们允许数据库系统直接定位到…

Mysql学习之MVCC解决读写问题

多版本并发控制 什么是MVCC MVCC &#xff08;Multiversion Concurrency Control&#xff09;多版本并发控制。顾名思义&#xff0c;MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之&#xff0…

【Tomcat】The CATALINA_HOME environment variable is not defined correctly

文章目录 一、问题二、解决办法三、优化 一、问题 运行绿色版Tomcat时&#xff0c;单击apache-tomcat-9.0.27\bin\startup.bat时窗口一闪而过。 检查JAVA_HOME环境变量&#xff0c;可以发现并没有问题。 为了检查错误&#xff0c;将startup.bat程序使用文本编辑器打开&#x…

Debezium发布历史163

原文地址&#xff1a; https://debezium.io/blog/2023/09/23/flink-spark-online-learning/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Online machine learning with the data streams from the database …