开源搜索技术的核心引擎 —— Lucene

在优快云学Golang分布式中间件(ElasticSearch) 倒排索引是一种用于快速查找文本中特定单词或短语的数据结构。它将文本中的每个单词或短语与包含该单词或短语的文档列表相关联。这使得可以轻松地查找包含给定单词或短语的所有文档。在 Go 中,可以使用 map 和 slice 来实现倒排索引。具体来说,可以使用一个 map 将每个单词映射到包含该单词的文档列表。这样就可以通过检索特定单词来获取包含该单词的所有文档。另一方面,Lucene 是一个全文搜索引擎库,可用于建立更高效和更复杂的倒排索引。 阅读详情

640?wx_fmt=png

ES 很了不起,需要使用搜索技术的互联网公司大半都在使用他,但是它的核心引擎却是另一个开源框架 —— Lucene。ES 只是在 Lucene 的基础上穿了一件华丽的外衣,没有 ES 还会有其它产品来包装 Lucene,比如另一个仅次于 ES 的流行搜索系统 Solr,但是如果没有 Lucene,那 ES 可能就不会存在。这就好比 TiDB 也并不是百分百的中国人自己的存储系统,它的内部存储引擎是 RocksDB,来源于 Facebook,TiDB 也只是在它的基础上穿上的一件华丽的外衣。

 

       640?wx_fmt=png      

 

但是呢我们却不能小瞧这一件外衣,它的复杂程度也不亚于内部的引擎本身。Lucene 出来这么多年,市场上流行的基于 Lucene 的分布式开源搜索系统也只有 ES 和 Solr 两个。不同于我们平时常用的 Web 框架五花八门,开源的搜索系统却并不是很丰富,因为它的制造成本比 Web 框架要高出太多。Lucene 在开源的搜索引擎里一直处于垄断地位,它的实现语言是 Java 语言。以至于开源的分布式搜索系统也不得跟着使用 Java 语言,使用其它语言克隆一个差不多的 Lucene 代价太高了 —— Lucene 的功能实在太丰富。我们在 Github 上可以搜索到 Go 语言版本的 Lucene,但是它只是一个半吊子工程,太过于简陋了,而是似乎已经很多年不再维护。

 

所以如果读者希望更加深入地了解搜索技术,那就必须把 Lucene 吃透。在 Lucene 非常了解的基础上再来研究 ES 就可以事半功倍。但是有一件事必须要提,那就是 Lucene 的复杂程度要比 LevelDB 高出不少,所以需要有心理准备。在很多互联网大厂,它们通常都是自己撸的一套搜索引擎,既不会使用 Lucene,也不会使用 ES、Solr。但是这并不意味着它们自己做出的东西就比开源的出色,只不过它们为了自身的业务做了很多定制性的工作,在某些方向上可以舍弃通用型而打磨的更加极致。但是究其内部引擎的实现上他们通常都会非常频繁的参考开源实现 —— 开源技术就是一座现成的金矿,巨人的肩膀不站白不站。

 

Lucene 就是一个单机版的搜索引擎,就好比 LevelDB 就是一个单机版的 Key-Value 数据库一样。Lucene 最基本的功能分为写功能和读功能,写的过程就是建索引,读的过程就是使用索引。写的过程越精致,读的过程就越准确越快速。这就好比你的高中书桌越整齐,找书的速度就越快,但是平时投入在书桌整理的时间上也就越多。这一点我深有体会 —— 因为我发现相比别人而言,我的高中书桌总是很乱,每次找书总要找很久。我也曾经尝试过要做到像他们一样,但是不出一个礼拜,书桌就再次陷入混乱。

 

Lucene 是 Java 语言实现的,我可能会编写一些 Java 代码来尝试 Lucene 的各种功能,希望对 Java 语言感到厌烦的同学请保持克制。不入虎穴焉得虎子,如果你看到 Java 语言就躲,那么毫无疑问你会错过很多美丽的风景线。

 

Lucene 内部就是一座巨大的宝藏,将这些宝藏一一挖掘出来将会给我们带来无尽的收益。在本系列的后续文章中,我们首先会对 Lucene 进行一系列的分析讲解,给搜索技术打上夯实的基础。也许你会质疑学习 Lucene 对我们这些写业务代码的能带来什么帮助?业务代码不过是 CRUD,不过是复制粘贴,并不需要多么高级的知识就可以完成,学习这些高级的知识不过是走马观花一边进一边出。这是一个非常好的问题,可是如果我们一直这样 CRUD,那么作为一条咸鱼该何时才能翻身呢?

下面是有钱(有老钱)的字节跳动内推入口,找出自己心意的职位后,请勇于投递你的个人简历,内部系统的数据安全性做得非常到位,我是看不到你们的简历内容的,所以不必太担心个人隐私问题。北京、上海、深圳、杭州、成都、广州等城市的职位都有,Python、Java、Golang、算法、数据、分布式计算和存储的岗位也都有,各人发挥自己的搜商自行搜寻。请认真投递自己的简历,否则可能连面试的机会都没有。

640?wx_fmt=png

深入理解Lucene:开源全文搜索引擎的核心技术解析 Lucene是一个开源的全文搜索引擎库,提供了强大的文本搜索和检索功能。它由Apache软件基金会维护和开发,采用Java语言编写,因其高性能、可扩展性和灵活性而备受欢迎。索引:索引是一种数据结构,用于加速数据的查找和检索。在全文搜索领域中,索引通常指的是文本数据的索引,用于加速文本搜索过程。需要索引的原因文本数据量大:在大规模文本数据中进行搜索需要耗费大量时间。提高搜索效率:通过构建索引,可以将文本数据结构化并存储在内存或磁盘上,从而加快搜索速度。 阅读详情

相关推荐

搜索引擎技术分析实战指南

搜索引擎作为互联网信息检索的主要工具,其核心技术包括网页抓取、索引构建、查询处理等多个复杂环节。了解这些技术的基本原理和相互之间的关联,是理解搜索引擎内部工作流程的关键。本章将对搜索引擎的核心技术做全面的概述,并简要介绍其在信息检索中的作用与意义。让我们从搜索引擎的工作原理开始,逐步深入探索这一神秘而又复杂的领域。搜索引擎通过索引大量的网页内容,为用户提供快速准确的信息检索服务。其核心流程通常包括:网页抓取、索引构建、查询处理和结果排序。

weixin_42584758的博客 1139

GoLucene 使用教程

GoLucene 使用教程 项目介绍 GoLucene 是一个将 Apache Lucene 引擎移植到 Go 语言的开源项目。它的目标不仅仅是简单地复制功能,而是为 Go 开发者提供一个嵌入式的、易于使用的全文检索解决方案。这个项目以 Lucene Java 版本 4.10 为基础,并在 2014 年 10 月进行同步更新。GoLucene 保留了 Lucene 的核心特性,如高效文本处理、倒排...

gitblog_00938的博客 527

探索Lucene与Solr的开源搜索技术新纪元:沙箱体验

Lucene和Solr是搜索引擎技术领域中的两项重要技术。Lucene是一个高效的、可移植的、跨平台的搜索引擎库,它提供了一个简单却强大的应用编程接口,允许开发者在各种应用中实现全文搜索功能。Solr是一个基于Lucene构建的开源搜索平台,它提供了一个可插拔的HTTP/XML和JSON的API,让开发人员可以非常容易地构建Web应用程序。Solr通过利用Lucene的全文搜索功能,并对其进行了扩展,提供了诸如全文搜索、高亮显示、自动拼写检查、智能缓存和数据库集成等功能。

weixin_42443533的博客 742

探索Go世界的搜索引擎:golucene

探索Go世界的搜索引擎:golucene 项目介绍 golucene 是一个将 Apache Lucene 引擎移植到 Go 语言的开源项目。它的目标不仅仅是简单地复制功能,而是为 Go 开发者提供一个嵌入式的、易于使用的全文检索解决方案。这个项目以 Lucene Java 版本 4.10 为基础,并在 2014 年 10 月进行同步更新。 项目技术分析 golucene 保留了 Lucene 的...

gitblog_00039的博客 633

hamlet:使用 GoLucene 的示例应用程序

村庄 使用 GoLucene 的示例应用程序

【Unity】YooAsset + HybridCLR热更

本文介绍了Unity游戏开发中的热更新技术方案,重点对比了资源热更和代码热更的主流工具。资源热更方面分析了Asset Bundle、Addressable和YooAsset的优缺点;代码热更部分比较了xLua、ILRuntime、InjectFix和HybridCLR的性能特点。文章详细演示了HybridCLR+YooAsset的实践方案,包括加载热更新程序集、反射调用热更代码、资源打包部署等完整流程。该方案通过原生运行时实现程序集级热更,具有极低性能损耗和全生命周期适用性,配合YooAsset简化了资源管

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 2921

Lucene经典搜索引擎知识总结

高性能、可扩展的信息检索工具类库简单强大的核心APIES的底层工具扩展性体现在多种扩展包,常见如spellchecker拼写检查模块,highlighter 搜索结果高亮模块。只要数据源可以转换为文本形式,lucene 即可创建索引。(如pdf,xml,txt等)

宋小黑的博客 1100

混合开关电容DCDC变换器技术解析与工程应用指南

在电源设计领域,传统DCDC变换器在高降压比或高升压比场景下,往往面临占空比过窄、开关应力大、效率偏低等瓶颈。开关电容变换器虽能实现固定比例的电压变换,却受限于调节能力。混合开关电容DCDC变换器通过“开关电容网络粗调变比+电感式DCDC细调输出”的策略,兼顾高效率、高功率密度与宽调压范围。本文梳理了其典型拓扑(如2:1/4:1 SC+Buck)、关键对比、控制策略(含软充电)及工程应用中的常见问题,帮助电源工程师在服务器供电、快充、车载电源等场景下快速选型与调试。

weixin_29164185的博客 316

ajax+Lucene构建搜索引擎

最近对搜索引擎技术很感兴趣,就从图书馆借了这本《ajax+Lucene构建搜索引擎》看,体会到现在利用开源程序建立和构建搜索引擎已经很简单了,但要做的好就相当难了。ajax(阿贾克斯)Asychronous javaScript and XML 即异步javaScript与XML。典型的应用有Google Suggest和Google Map服务。Lucene是Apache开源软件联盟贡献

4克拉 745

深度学习模型设计的方法和技巧

设计神经网络模型是一个迭代的过程,需要不断试验和调整各个组成部分,以达到最佳性能。同时,遵循良好的工程实践,如模块化设计、版本控制、文档记录等,也是成功的关键。

xw555666的博客 4027

Android车载应用开发:Kotlin与Automotive OS深度实践

Android Automotive OS(AAOS)是Google专为车辆设计的操作系统,直接运行于车机硬件,提供完整的车载信息娱乐系统(IVI)。与Android Auto不同,AAOS允许开发者深度集成车辆硬件功能,如空调控制和传感器数据读取,同时遵循严格的驾驶安全规范。Kotlin作为开发语言,具备空安全设计、扩展函数和协程支持等优势,简化了开发流程。开发环境配置包括Android Studio、AAOS模拟器和Gradle配置,核心组件如CarAppService、Screen与模板系统,以及车辆

时小雨的专栏 3445

开源搜索引擎资源

开源搜索引擎资源2008年06月30日 星期一 下午 11:55搜索引擎的工作流程主要分为三步:从互联网抓取网页→创建抓取网页的索引库→从索引库中进行搜索。 首先需要一个能访问网络的爬虫器 程序,依据URL之间的关联性自动爬行整个互联网,并对爬行过的网页进行抓取收集。当网页被收集回来后,采用索引分析程序进行网页信息的分析,依据一定的 相关度算法(如超链接算法)进行大量计算,创建倒排序的索引...

145

Flowable任务节点动态预测:基于任务ID与参数获取下一节点及候选分配策略

本文深入探讨了Flowable工作流引擎中任务节点动态预测功能的实现。通过解析任务ID与运行时参数,模拟流程执行路径,精准预测下一节点及候选用户/组集合,从而提升用户体验与系统透明度。核心在于利用自定义命令实现表达式求值,并深度解析候选者分配策略,确保预测结果与实际流程执行一致。

nnn11的博客 744

Doug Cutting 访谈录 -- 关于搜索引擎的开发

作为Lucene和Nutch两 大Apach Open Source Project的始创人(其实还有Lucy, Lucene4C 和Hadoop等相关子项目),Doug Cutting 一直为搜索引擎的开发人员所关注。他终于在为Yahoo以Contractor的身份工作4年后,于今年正式以Employee的身份加入Yahoo 下面是笔者在工作之余,翻译其一篇2年前的访谈录,原文(Doug ...

zhangljerry的专栏 136

【仿真技巧】Smart Eye Probe在ADS信号仿真中的应用

Smart_Eye_Probe是一个眼探头,允许灵活数量的输入通道,输入通道支持单端或差分信号的混合,并且,可以使用一个共同的时钟信号触发通道的眼图。目前,仅支持瞬态(Transient)和通道(Channel Sim)逐位模式(Bit by bit)模拟,不支持信道统计(Statistical)模式和DDR总线(DDRSim)仿真。

一只豌豆象的博客 1271

【C2000系列DSP的双向DC-DC电源】基于TMS320F28034的DC-DC项目开发流程

理解DC-DC 双向电源(基于 TMS320F28034)的开发流程,需要从功能拆解、开发步骤、验证 / 测试项

昔时扬尘处 324

【Elasticsearch入门到落地】1、初识Elasticsearch

Elasticsearch(简称ES)是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。它使用Java编写,基于Apache Lucene来构建索引和提供搜索功能,是一个分布式、可扩展、近实时的高性能搜索与数据分析引擎。

程序猿之洞 1866

CMake教程:C++ CMake自定义find_package并在其它项目使用

find_package 是 CMake 中一个非常重要的命令,用于在系统中找到外部库或包,并将其包含到项目中。: 要查找的包的名称。[version]: 可选的版本号。如果指定了版本号,CMake 会尝试找到该版本或更高版本的包。[REQUIRED]: 如果指定了这个关键字,找不到包时会产生一个错误并终止配置过程。: 指定要查找的包的组件。: 指定可选的组件,即使找不到这些组件,配置过程也会继续。: 指定查找包的模式,CONFIG表示查找配置文件,MODULE表示查找模块文件。

琅嬛福地 1564

Lucene简介,教程详解

简介 Lucene 是一个开源、高度可扩展的搜索引擎库,可以从 Apache Software Foundation 获取。您可以将 Lucene 用于商业和开源应用程序。Lucene 强大的 API 主要关注文本索引和搜索。它可以用于为各种应用程序构建搜索功能,比如电子邮件客户端、邮件列表、Web 搜索、数据库搜索等等。Wikipedia、TheServerSide、jGuru 和 Lin

kinmet2010的专栏 2346

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Lucene IN ACTION 中文版(更新中)

Lucene IN ACTION 中文版 书名:Lucene IN ACTION 中文版 作者:(美)高斯帕那(Gospodnetic,O.),(美)哈特赫(Hatcher,E.) 著,谭鸿 来源:电子工业出版社 出版时间:2007年01月 ISBN:7121032171 定价:49元 看 书 图书版权

luminary_star_ocean的专栏 1074

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Doug Cutting 访谈录--关于搜索引擎的开发(转载)

作为Lucene和Nutch两大Apach Open Source Project的始创人(其实还有Lucy, Lucene4C 和Hadoop等相关子项目),Doug Cutting 一直为搜索引擎的开发人员所关注。他终于在为Yahoo以Contractor的身份工作4年后,于今年正式以Employee的身份加入Yahoo 下面是笔者在工作之余,翻译其一篇2年前的访谈录...

weixin_30379973的博客 110

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【分布式搜索引擎】-初识elasticsearch

什么是elasticsearch?一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能什么是elastic stack(ELK)?是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch什么是Lucene?是Apache的开源搜索引擎类库,提供了搜索引擎的核心API分词器的作用是什么?创建倒排索引时对文档分词用户搜索时,对输入的内容分词IK分词器有几种模式?ik_smart:智能切分,粗粒度。

Eumenides_Suki的博客 1047

娱乐头条-04lucene

1.搜索引擎 2.lucene 一、搜索引擎 1.什么是搜索引擎 搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。例如: 百度 谷歌 2.搜索引擎基本的运行原理 3.原始数据库查询的缺陷 慢, 当数据库中的数据量很庞大的时候, 整个的查询效率非常低, 无法...

WYJ____的博客 531

lucene总结笔记

lucene     1.为什么学        全文(全站) 数据库(网页)-->索引-->搜索           用数据库(功能差,效率低)               通用(baidu.com)             爬虫网页-->索引-->搜索     2.是什么       是apache基金一个开源子项目,专门用于全文搜索引擎。           3.原

494

了解elasticsearch

什么是elasticsearch?一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能什么是elastic stack(ELK)?是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch什么是Lucene?是Apache的开源搜索引擎类库,提供了搜索引擎的核心API。

Xinnnnn的博客 759
上一篇: 字节跳动面试题 —— 水壶问题
下一篇: 万亿级图数据库 Nebula Graph 的数据模型和架构设计
码洞
博客等级 码龄10年 41粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值