Elasticsearch:如何创建搜索引擎

news2024/11/15 8:23:20

作者: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.coloradmin.cn/o/1486808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux-fork习题

通过fork产生子进程后,在以下子进程中发生改变的时候不会引起父进程中相应的改变的有() A 文件指针 B 局部变量 C 全局变量 D 静态变量 答案应该是无答案 linux下父进程创建子进程后,子进程会复制父进程的用户层空间的数据…

安装Docker及DockerCompose

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

1. vue3-环境准备

1、安装node.js 如果开发环境上面没有安装node.js,需要到node.js官方网站下载node.js。下载安装后,可以通过npm --version查看nodejs版本 2. 开发工具 开发工具建议使用vscode

word使用bib添加参考文献

文章目录 安装TexLive安装bibtex4word使用在word中添加参考文献使用bibtex4word在word中添加参考文献设置参考文献格式为毕业论文格式 参考 安装TexLive 从下载地址下载镜像iso文件texlive2023.iso双击打开iso镜像文件运行 install-tl-windows.bat点击安装非常非常非常耐心地安…

一个教材上的CMS网站源码在Linux服务器上登录时验证码正常,但在windows下不能正常显示

一个教材上的CMS网站源码在Linux服务器上登录时验证码正常,但在windows下不能正常显示。 在linux服务器上能正常显示。显示界面如下所示:

第十篇:复习maven

文章目录 一、什么是Maven1. 依赖管理2. 统一项目结构3. 项目构建4. 依赖的仓库 二、IDEA集成Maven1. Maven简单的安装和配置2. 配置Maven环境3. 创建Maven项目4. Maven坐标4. 导入Maven项目 三、依赖管理1. 依赖配置2. 依赖传递3. 依赖范围4. 生命周期 四、小结 一、什么是Mav…

机器学习-面经

经历了2023年的秋招,现在也已经入职半年了,空闲时间将面试中可能遇到的机器学习问题整理了一下,可能答案也会有错误的,希望大家能指出!另外,不论是实习,还是校招,都祝福大家能够拿到…

《UE5_C++多人TPS完整教程》学习笔记25 ——《P26 游戏项目创建(Project Creation)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P26 游戏项目创建(Project Creation)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者…

【Linux信号】

目录 信号是什么Linux通过kill -l查看指令 信号的产生signal系统调用捕捉信号键盘产生信号系统调用产生信号进程异常产生信号软件条件发送信号 Code Dump信号保存信号抵达信号产生到信号抵达之间的状态叫信号未决。进程可以对信号进行阻塞使用sigprocmask()系统调用接口阻塞blo…

设计模式(九)模版方法模式

请直接看原文:设计模式(九)模版方法模式_模板方法模式的优缺点-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 1.模版方法模式简介 模版方法模式介…

【架构笔记2】设计不足和过度设计

复杂系统问题设计中有两类现象需要引起关注:设计不足和过度设计,通常第一种比较常见,第二种则也是一种灾难。当然我认为他们都可以被优化,如果用正确的流程引导,在框架模板的限定下放飞,就像教养孩子有个观…

Git实战(1)

一, git log 查看提交日志情况 根据 commitId进行版本回退 git reset --hard commitId(commitId可以是一部分,不用完整的ID) 只输出一行信息: git log --pretty=oneline 快速回退: git reset --hard HEAD^ 回退到上一个版本 git reset --hard HEAD^^ 回退到上上个版本 如果…

力扣74. 搜索二维矩阵(二分查找)

Problem: 74. 搜索二维矩阵 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1:映射为一维数组二分查找 1.由于题目矩阵中的元素整体是升序的,我们可以将其放置在一个大小为 m n m \times n mn的一维数组array中进行二分查找 2.对应的映射关系是ar…

蓝桥杯备赛 day1 | 1. 门牌制作, 2. 迷宫, 3. 乘积尾零

最近正好在刷算法题&#xff0c;报了一个蓝桥杯体验一下&#xff0c;但是钱都交了&#xff0c;高低混个奖好吧&#xff0c;今天做的都是一些填空推理题&#xff0c;相当于用程序写下正解&#xff0c;代码是在Dev C上面写的 #include<iostream> #include<bits/stdc.h&g…

HikariCP与Spring Boot的完美集成,让您的应用更高效、更可靠!

随着Spring Boot的流行&#xff0c;越来越多的开发者选择使用它来构建高效、可扩展的应用程序。然而&#xff0c;在构建应用程序的过程中&#xff0c;数据库连接的管理也是一个非常重要的环节。在这篇文章中&#xff0c;我们将介绍如何将HikariCP这一高效的数据库连接池与Sprin…

性能对比:mysql 5.7-8.0-TiDB 7.5-OceanBase 4.2-MariaDB 10.11-机械硬盘-固态硬盘-

1.mysql 5.7-8.0 5.7比8.0优秀 结果&#xff1a;5.7比8.0优秀 10% 2.机械硬盘和固态硬盘 影响不大&#xff0c;主要是CPU 3. JAVA MYSQL 分开 4.『直属 MySQL 』vs 『Docker MySQL』 vs 『Podman MySQL』 直属最好 &#xff0c;其次是Podman&#xff0c;最后是DOCKER 5.MySQL …

Python光速入门 - Flask轻量级框架

FlASK是一个轻量级的WSGI Web应用程序框架&#xff0c;Flask的核心包括Werkzeug工具箱和Jinja2模板引擎&#xff0c;它没有默认使用的数据库或窗体验证工具&#xff0c;这意味着用户可以根据自己的需求选择不同的数据库和验证工具。Flask的设计理念是保持核心简单&#xff0c…

Qt/事件分发器/事件过滤器

事件分发器 //事件分发器bool event(QEvent* e); //事件分发器&#xff1a;&#xff1a;用途 分发事件 bool MyLabel::event(QEvent* e) {if(e->type() QEvent::MouseButtonPress){//如果是鼠标摁下 拦截事件 不向下分发QMouseEvent* ev static_cast<QMouseEvent*>…

【JS 算法题: 将 json 转换为字符串】

题目简介 其实就是手撕 JSON.stringfy()。 算法实现 输入 原则上来说&#xff0c;输入的是一个 json 对象。但需要考虑到异常情况&#xff0c;即输入了其它类型的数据&#xff0c;比如&#xff1a;12, true, ‘abc’, [‘red’, ‘green’], null, undefined 等。 输出 …

AGM CPLD (AGRV2K )的时钟(外部时钟和片上内部振荡器)

AGM CPLD &#xff08;AGRV2K &#xff09;的时钟(外部时钟和片上内部振荡器) 外部晶振 与 内部振荡器&#xff1a; mcu 和 cpld 联合编程时&#xff0c; 整颗芯片需要一颗外部晶振。 &#xff08;芯片有内部振荡器&#xff0c; 但误差较大&#xff0c; 校准后 5%以内误差&…