自然语言处理系列六十九》搜索引擎项目实战》搜索框架技术选型

news2025/4/22 0:51:05

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】

文章目录

  • 自然语言处理系列六十九
    • 搜索引擎项目实战》搜索框架技术选型
      • 搜索引擎项目代码实战
  • 总结

自然语言处理系列六十九

搜索引擎项目实战》搜索框架技术选型

搜索引擎框架前面讲到过Lucene、Solr Cloud和Elasticsearch,这几个框架做垂直搜索引擎就是非常不错的选择。但选择哪个更好一些呢?做这个选择需要综合考虑到几点因素,第一要看的技术框架本身哪个更合适,其次考虑自己团队的开发人员对哪个框架更熟悉、研发成本更低,在技术框架相对差不多的情况下,应该选择开发人员都熟悉的一个框架。那么还有一个考虑的因素就是开发的工作量,就是用哪个框架开发的更快选择哪个。这几个因素是需要综合衡量,权衡利弊的,相同的项目也要根据每个公司不同的情况分别对待。下面根据纯技术角度来评估哪个搜索框架更合理。
Lucene是单机版的,适合数据量比较小的情况。但在公司实际业务中,需要考虑到公司的发展因素,未来几个月、半年、一年业务会发展到什么程度,如果能预见到数据量会快速增长,那么就需要考虑的长远一些。Lucene是单机版并不能满足数据日益增长的需求,后面再切换到分布式搜索Solr Cloud或Elasticsearch,开发成本就会成倍增加,代码需要再修改一遍。所以把公司业务发展因素考虑进去,一般不建议使用Lucene,可以直接使用Solr Cloud或Elasticsearch。分布式搜索支持多个节点的分布式,当然也支持单个节点。所以数据量小的时候部署单个节点或者比较少的节点,当数据量增大在根据情况增加节点扩展即可。那么下面就从以下几个方面来对比Solr Cloud和Elasticsearch即可。
1. 历史比较
Apache Solr是一个成熟的项目,拥有庞大而活跃的开发和用户社区,以及Apache品牌。Solr于2006年首次发布到开源,长期以来一直占据着搜索引擎领域,并且是任何需要搜索功能的人的首选引擎。它的成熟转化为丰富的功能,而不仅仅是简单的文本索引和搜索; 如分面,分组,强大的过滤,可插入的文档处理,可插入的搜索链组件,语言检测等。Solr 在搜索领域占据了多年的主导地位。然后,在2010年左右,Elasticsearch成为市场上的另一种选择。那时候,它远没有Solr那么稳定,没有Solr的功能深度,没有思想分享,品牌等等。Elasticsearch虽然很年轻,但它也自己的一些优势,Elasticsearch 建立在更现代的原则上,针对更现代的用例,并且是为了更容易处理大型索引和高查询率而构建的。此外,由于它太年轻,没有社区可以合作,它可以自由地向前推进,而不需要与其他人(用户或开发人员)达成任何共识或合作,向后兼容,或任何其他更成熟的软件通常必须处理。
因此,它在Solr之前就公开了一些非常受欢迎的功能(例如,接近实时搜索,英文:Near Real-Time Search)。从技术上讲,NRT搜索的能力确实来自Lucene,它是 Solr 和 Elasticsearch 使用的基础搜索库。具有讽刺意味的是,因为 Elasticsearch 首先公开了NRT搜索,所以人们将NRT搜索与Elasticsearch 联系在一起,尽管 Solr 和 Lucene 都是同一个 Apache 项目的一部分,因此,人们会首先期望 Solr 具有如此高要求的功能。
2. 特征差异比较
这两个搜索引擎都是流行的,先进的的开源搜索引擎。它们都是围绕核心底层搜索库 - Lucene构建的 - 但它们又是不同的。像所有东西一样,每个都有其优点和缺点,根据您的需求和期望,每个都可能更好或更差。Solr和Elasticsearch都在快速发展,所以,话不多说,先来看下它们的差异清单,如表19.1所示。

在这里插入图片描述

表19.1 Solr Cloud和Elasticsearch比较
3.近几年的流行趋势
我们查看一下这两种产品的Google搜索趋势。谷歌趋势表明,与 Solr 相比,Elasticsearch具有很大的吸引力,但Solr仍然是最受欢迎的搜索引擎之一,拥有强大的社区和开源支持。
4.安装和配置
与Solr相比,Elasticsearch易于安装且非常轻巧。此外,您可以在几分钟内安装并运行Elasticsearch。但是,如果Elasticsearch管理不当,这种易于部署和使用可能会成为一个问题。基于JSON的配置很简单,但如果要为文件中的每个配置指定注释,那么它不适合您。总的来说,如果您的应用使用的是JSON,那么Elasticsearch是一个更好的选择。否则,请使用Solr,因为它的schema.xml和solrconfig.xml都有很好的文档记录。
5.社区及成熟度
Solr拥有更大,更成熟的用户,开发者和贡献者社区。ES虽拥有的规模较小但活跃的用户社区以及不断增长的贡献者社区。Solr是真正的开源社区代码。任何人都可以为Solr做出贡献,并且根据优点选出新的Solr开发人员(也称为提交者)。Elasticsearch在技术上是开源的,但在精神上却不那么重要。任何人都可以看到来源,任何人都可以更改它并提供贡献,但只有Elasticsearch的员工才能真正对Elasticsearch进行更改。Solr贡献者和提交者来自许多不同的组织,而Elasticsearch提交者来自单个公司。成熟度方面显然Solr更成熟,但ES增长迅速。
6.文档
Solr在这里得分很高。它是一个非常有据可查的产品,具有清晰的示例和API用例场景。 Elasticsearch的文档组织良好,但它缺乏好的示例和清晰的配置说明。
以上说的他们各有千秋不相上下,那么,到底是Solr还是Elasticsearch?个人建议可以把上面提到的公司自身团队情况考虑进去,如果团队更熟悉Solr那就用Solr,更熟悉Elasticsearch那就用Elasticsearch。无论您选择Solr还是Elasticsearch,可以记住几下几点:
1)由于易于使用,Elasticsearch在新开发者中更受欢迎。但是,如果您已经习惯了与Solr合作,请继续使用它,因为迁移到Elasticsearch没有特定的优势。
2)如果除了搜索文本之外还需要它来处理分析查询,Elasticsearch是更好的选择。
3)如果需要分布式索引,则需要选择Elasticsearch。对于需要良好可伸缩性和性能的云和分布式环境,Elasticsearch是更好的选择。
4)两者都有良好的商业支持(咨询,生产支持,整合等)
5)两者都有很好的操作工具,尽管Elasticsearch因其易于使用的API而更多地吸引了DevOps人群,因此可以围绕它创建一个更加生动的工具生态系统。
6)Elasticsearch在开源日志管理用例中占据主导地位,许多组织在Elasticsearch中索引它们的日志以使其可搜索。虽然Solr现在也可以用于此目的,但它只是错过了这一想法。
7)Solr仍然更加面向文本搜索。另一方面,Elasticsearch 通常用于过滤和分组 - 分析查询工作负载 - 而不一定是文本搜索。Elasticsearch 开发人员在 Lucene 和 Elasticsearch 级别上投入了大量精力使此类查询更高效(降低内存占用和CPU使用)。因此,对于不仅需要进行文本搜索,而且需要复杂的搜索时间聚合的应用程序,Elasticsearch是一个更好的选择。
8)Elasticsearch更容易上手,一个下载和一个命令就可以启动一切。Solr传统上需要更多的工作和知识,但Solr最近在消除这一点上取得了巨大的进步,现在只需努力改变它的声誉。
9)在性能方面,它们大致相同。我说“大致”,因为没有人做过全面和无偏见的基准测试。对于95%的用例,任何一种选择在性能方面都会很好,剩下的5%需要用它们的特定数据和特定的访问模式来测试这两种解决方案。
10)从操作上讲,Elasticsearch使用起来比较简单 - 它只有一个进程。Solr在其类似Elasticsearch的完全分布式部署模式SolrCloud中依赖于Apache ZooKeeper。ZooKeeper是超级成熟,超级广泛使用等等,但它仍然是另一个活跃的部分。也就是说,如果您使用的是Hadoop,HBase,Spark,Kafka或其他一些较新的分布式软件,您可能已经在组织的某个地方运行ZooKeeper。
11)虽然Elasticsearch内置了类似ZooKeeper的组件Xen,但ZooKeeper可以更好地防止有时在Elasticsearch集群中出现的可怕的裂脑问题。公平地说,Elasticsearch开发人员已经意识到这个问题,并致力于改进Elasticsearch的这个方面。
12)如果您喜欢监控和指标,那么使用Elasticsearch,您将会进入天堂。这个东西比新年前夜在时代广场可以挤压的人有更多的指标!Solr暴露了关键指标,但远不及Elasticsearch那么多。
总之,两者都是功能丰富的搜索引擎,只要设计和实现得当,它们或多或少都能提供相同的性能。
在分布式搜索框架中Solr Cloud和Elasticsearch一般来说多数情况是满足需求的,如果有更高的性能要求,一般是用C++编写核心检索模块。

搜索引擎项目代码实战

搜索引擎项目代码实战内容可参见
《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】书籍。
更多的技术交流和探讨也欢迎加我个人微信chenjinglei66。

总结

此文章有对应的配套新书教材和视频:

【配套新书教材】
《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:本书从自然语言处理基础开始,逐步深入各种NLP热点前沿技术,使用了Java和Python两门语言精心编排了大量代码实例,契合公司实际工作场景技能,侧重实战。
全书共分为19章,详细讲解中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注、文本相似度算法、语义相似度计算、词频-逆文档频率(TF-IDF)、条件随机场、新词发现与短语提取、搜索引擎Solr Cloud和Elasticsearch、Word2vec词向量模型、文本分类、文本聚类、关键词提取和文本摘要、自然语言模型(Language Model)、分布式深度学习实战等内容,同时配套完整实战项目,例如对话机器人实战、搜索引擎项目实战、推荐算法系统实战。
本书理论联系实践,深入浅出,知识点全面,通过阅读本书,读者不仅可以理解自然语言处理的知识,还能通过实战项目案例更好地将理论融入实际工作中。
《分布式机器学习实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目。

【配套视频】

推荐系统/智能问答/人脸识别实战 视频教程【陈敬雷】
视频特色:把目前互联网热门、前沿的项目实战汇聚一堂,通过真实的项目实战课程,让你快速成为算法总监、架构师、技术负责人!包含了推荐系统、智能问答、人脸识别等前沿的精品课程,下面分别介绍各个实战项目:
1、推荐算法系统实战
听完此课,可以实现一个完整的推荐系统!下面我们就从推荐系统的整体架构以及各个子系统的实现给大家深度解密来自一线大型互联网公司重量级的实战产品项目!
2、智能问答/对话机器人实战
由浅入深的给大家详细讲解对话机器人项目的原理以及代码实现、并在公司服务器上演示如何实际操作和部署的全过程!
3、人脸识别实战
从人脸识别原理、人脸识别应用场景、人脸检测与对齐、人脸识别比对、人脸年龄识别、人脸性别识别几个方向,从理论到源码实战、再到服务器操作给大家深度讲解!

自然语言处理NLP原理与实战 视频教程【陈敬雷】
视频特色:《自然语言处理NLP原理与实战》包含了互联网公司前沿的热门算法的核心原理,以及源码级别的应用操作实战,直接讲解自然语言处理的核心精髓部分,自然语言处理从业者或者转行自然语言处理者必听视频!

人工智能《分布式机器学习实战》 视频教程【陈敬雷】
视频特色:视频核心内容有互联网公司大数据和人工智能、大数据算法系统架构、大数据基础、Python编程、Java编程、Scala编程、Docker容器、Mahout分布式机器学习平台、Spark分布式机器学习平台、分布式深度学习框架和神经网络算法、自然语言处理算法、工业级完整系统实战(推荐算法系统实战、人脸识别实战、对话机器人实战)。

上一篇:自然语言处理系列六十八》搜索引擎项目实战》搜索引擎系统架构设计
下一篇:自然语言处理系列七十》搜索引擎项目实战》搜索Query意图识别和智能纠错

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

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

相关文章

大模型结合知识库问答应用第一次实践

大模型结合知识库问答应用第一次实践 这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 记录一次用大模型LLM和向量数据库,搭建垂直领域的知识库问答实践。上文已经介绍了文本如…

第151天:红队APT-钓鱼篇邮件钓鱼SPF绕过自建邮件系统SwaksGophish

案例一:邮件钓鱼-前置知识 现在很多大型网站的邮件服务器已经做的很安全了,文中的很多方法感觉已经不适用,学习思路遇到公司自己搭建的邮件服务器可以尝试把 SPF 发件人策略框架( Sender Policy Framework )电子邮件认…

移植案例与原理 - utils子系统之file文件操作部件

往期知识点记录: 往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 startup子系统之syspara_lite系统属性部件 (1) startup子系统之syspara_lite系统属性部件 &#xff…

基于ssm+vue+uniapp的电影交流平台小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

海康IPC摄像头通过国标28181方式接入带域名的视频监控接入平台,视频通道无法上传到视频监控平台,导致无法获取视频资源的问题解决

目录 一、问题背景 二、域名介绍 1、域名详解 2、域名与IP的区别 三、解决过程 1、检查设备能力 2、升级摄像头的版本 3、通过域名进行连接 4、在视频监控平台观察接入情况 四、解决结果 一、问题背景 视频监控接入平台部署在内网环境,摄像头在公网或在另一个局…

【Linux C | 终端设备】Linux下 tty、ttyS*、ttyAMA*、console 的区别,以及系统输出重定向(附带代码)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰: 2024-09-11 …

QT实现TCP/UDP通信

服务器端&#xff1a; 客户端&#xff1a; 服务器&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QMessageBox> #include <QDebug&…

哈喽GPT-4o,现代程序员提高编码能力的正确打开方式

目录 round 1&#xff1a;图片识别能力ChatGPT4oClaude3.5 Sonnet图片识别能力小结&#xff1a;图片识别能力&#xff0c;ChatGPT4o完胜。 round 2&#xff1a;代码能力ChatGPT4oClaude3.5 Sonnet代码能力小结&#xff1a;代码能力&#xff0c;Claude3.5 Sonnet小胜。 round 3&…

一个人,如何管理上百个污水处理站?

管理上百个污水处理站&#xff0c;无疑是一项复杂而艰巨的任务&#xff0c;它不仅要求管理者具备深厚的专业知识、卓越的组织协调能力&#xff0c;还依赖于先进的技术支持与科学的管理模式。以下几点策略&#xff0c;可为高效管理众多污水处理站提供参考框架&#xff1a; 1. 部…

Unity+LeapMotion2的使用

开始吧 导入步骤1.到官网下载软件并安装2.安装插件3.场景中添加检测管理器4.场景中添加手部模型 更多细节 导入步骤 1.到官网下载软件并安装 地址 重启电脑后连接设备 可以看到连接成功 2.安装插件 &#xff08;也可以看官方教程&#xff09; Project—>PackageManag…

9.9日记录

1.常见排序算法的复杂度 1.快速排序 1.1快速排序为什么快 从名称上就能看出&#xff0c;快速排序在效率方面应该具有一定的优势。尽管快速排序的平均时间复杂度与“归并排序”和“堆排序”相同&#xff0c;但通常快速排序的效率更高&#xff0c;主要有以下原因。 出现最差情况…

DC 板 boot 测 nor 兼容性记录(qspi )

DC 板 boot 测 nor 兼容性记录&#xff08;qspi &#xff09; 软件问题&#xff1a; 1、DC板在跑 qspi时&#xff0c;在跑ddr 初始化部分需要修改以下参数&#xff0c;否则会在fsbl stage1 或者 stage 3 出错。 Board配置选 ad101_v10&#xff1b; 2、由于socket与DC板接触可能…

22. Revit API: 几何对象(三)- Solid操作

一、前言 几何对象中&#xff0c;Face就先跳过了&#xff0c;这里讲讲如何使用 Revit API 中 Solid 操作相关类。 使用SolidUtils&#xff0c;主要是复制和移动。使用GeometryCreationUtilities&#xff0c;生成Solid。使用SolidSolidCutUtils和BooleanOperationsUtils&#…

Python 从入门到实战14(字符串相关操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们通过举例学习了字符串进行简单说明。今天继续讨论字符…

斗地主之顺子

题目描述 在斗地主扑克牌游戏中&#xff0c;扑克牌由小到大的顺序为:3,4,5.6,7.8,9,10,J,Q,K,A,2&#xff0c;玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等。 其中顺子的出牌规则为:由至少5张由小到大连续递增的扑克牌组成&#xff0c;且不能包含2。 例如:(3.4.…

【Windows系统工具】dll综合解决工具,解锁专业版功能!

电脑上经常会出现dll文件丢失的情况&#xff0c;那么面对这种情况&#xff0c;小白用户应该如何应对并且解决呢&#xff1f; 这时&#xff0c;不得不提出dll综合解决工具的重要性了。虽然电脑上有很多自带的工具可以使用&#xff0c;但是方法步骤都比较复杂&#xff0c;很多小白…

day4 QT

作业 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), speech(new QTextToSpeech) {ui->setupUi(this);id startTimer(1000); }Widget::~Widget() {delete ui; }void Widget::tim…

从C语言过渡到C++

&#x1f4d4;个人主页&#x1f4da;&#xff1a;秋邱-CSDN博客☀️专属专栏✨&#xff1a;C &#x1f3c5;往期回顾&#x1f3c6;&#xff1a;单链表实现&#xff1a;从理论到代码-CSDN博客&#x1f31f;其他专栏&#x1f31f;&#xff1a;C语言_秋邱的博客-CSDN博客 目录 ​…

常用的 CMD 指令及其功能

目录 1&#xff1a;Win R命令。 2&#xff1a;cmd命令。 3&#xff1a;盘符名: 命令。 4: mkdir命令。 5&#xff1a;dir命令。 6: dir 名称。 7&#xff1a;Tab。 8&#xff1a;cd name。 9: copy con 文件的名字。 10: type 文件名。 11: cd .. 命令。 12&a…

分享 6 款在日常电脑办公中频繁使用的软件

分享6款经常能用到的电脑办公软件&#xff0c;个个功能强大又易用&#xff0c;装进电脑可以提高工作效率&#xff0c;让你每天准点下班~ 1、Dropit 这个软件真的很给力&#xff0c;特别适合我们这种平时电脑桌面上乱七八糟的人。你知道的&#xff0c;有时候下载各种东西&…