除了互联网信息检索之外,我们的很多解决方案仍然需要搜索引擎。比如企业内部的知识搜索、文档资料检索等。在一些基于大模型的AI知识库解决方案中也会用到知识检索的技术,例如LangChan。
本文主要介绍各种不同类别的搜索引擎及其独特的功能,同时,推荐一些被广泛使用的开源搜索引擎项目。
搜索引擎的类别
1.web搜索引擎
Web搜索引擎是最常见的搜索引擎。他们在互联网上搜索信息,并将结果显示给用户。目前比较流行的网络搜索引擎如:Google、Baidu、Bing和Yahoo。web搜索引擎抓取互联网上的大量信息并使用复杂的算法来索引内容。它们允许用户使用关键字或短语搜索信息,并在几秒钟内提供相关结果。
2.Meta搜索引擎
元搜索引擎不是直接搜索网页,而是聚合来自其他搜索引擎的结果并将其显示给用户。元搜索引擎可以用于查找可能被单个搜索引擎遗漏的信息,以及比较来自不同搜索引擎的结果。元搜索引擎的例子如:Dogpile、MetaCrawler。
3.全文搜索引擎
全文搜索引擎是在文档中搜索关键字或短语的搜索引擎。与传统搜索引擎只搜索文档中是否存在关键字不同,全文搜索引擎搜索文档的整个文本。全文搜索引擎对于在大型文档或文档集合(如图书馆或数据库)中查找特定信息非常有用。例如Elasticsearch、Apache Solr等就是用于全文检索的引擎。
4.文档搜索引擎
文档搜索引擎是专门设计用于检索文档(如PDF、Word等文件)的搜索引擎。文档搜索引擎对于在大型文件集合(如:文件服务器或文档管理管理系统)中查找特定文档非常有用。例如DocFetcher和SearchBlox就是文档搜索引擎。
搜索引擎的类型很多,以上只是一部分,每一种都有自己独特的功能和能力。
流行的开源搜索引擎
通过一些开源的搜索引擎的研究可以更深入理解搜索引擎的技术,了解搜索引擎发展的趋势。下面是一些比较好的搜索引擎项目,并且这些项目目前还保持一定的活跃性。
1.Meilisearch
开源地址:https://github.com/meilisearch/meilisearch
开发语言:Rust
Meilisearch是一个拥有闪电般速度的搜索引擎,能够轻松整合到应用程序、网站或者工作流。它可以塑造一个愉快的搜索体验,并提供开箱即用的功能
2.Weaviate
开源地址:https://github.com/weaviate/weaviate
开发语言:Go
Weaviate是一个开源向量数据库,存储对象和向量,允许将向量搜索与结构化过滤相结合,具有云原生数据库的容错性和可扩展性,可以通过GraphQL、REST和各种语言开发的客户端访问,如:Java、Go、Python、JavaScript。
weaviate特别适合用于与ChatGPT等大语言模型进行整合。
3.Mwmbl
开源地址:https://github.com/mwmbl/mwmbl
开发语言:Python
Mwmbl是一个公益的、无广告、自由、免费的搜索引擎,在可用性和速度方面特别优秀。但目前它还只不过是一个概念,是在一个小索引上实现Web前端和搜索技术的概念证明。
4.Elasticsearch
开源地址:https://github.com/elastic/elasticsearch
开发语言:Java
ES(Elasticsearch)是一个功能强大、用途广泛的搜索引擎。ES旨在提供高速和高度相关的搜索结果,并针对超大数据集的实时搜索进行了全面优化。主要用于矢量搜索、全文搜索、日志、指标、APM和安全日志,为用户提供全面且可扩展的解决方案,可根据其业务需求整合ES能力,进行定制化开发。
5.Searx
开源地址:https://github.com/searx/searx
开发语言:Python
Searx是一个免费的互联网元搜索引擎,它聚合了来自70多个搜索服务的结果。Searx既不跟踪也不分析用户的行为。适合用于在线匿名搜索。
6.Milvus
开源地址:https://github.com/milvus-io/milvus
开发语言:Go
Milvus是一个云原生向量数据库。可为嵌入式相似性搜索和AI应用提供支持。Milvus特别适合用于非结构化数据搜索,并且不论部署环境如何不同,它都提供一致的用户体验。它是开发以内容为中心的搜索应用程序以及大语言模型AI应用的存储解决最佳方案之一。
7.Typesense
开源地址:https://github.com/typesense/typesense
开发语言:C++
Typesense是一个开源的搜索引擎,支持容忍错别字,提供快速和用户友好的搜索体验。它使用先进的搜索算法,并且注重用户隐私。Typesense适用于创建分面导航、地理搜索、向量搜索、语义搜索和相似性搜索等应用。
8.FlexSearch
开源地址:https://github.com/nextapps-de/flexsearch
开发语言:JavaScript
FlexSearch是一个用于全文搜索的JS库,具备高速、灵活、零依赖等特性。它能够处理大量数据,易于在各种应用程序中使用。
9.Whoogle Search
开源地址:https://github.com/benbusby/whoogle-search
开发语言:Python
Whoogle Search是一个元搜索引擎,没有广告、跟踪器、AMP链接,也没有Cookie或IP地址跟踪。可以使用Docker私有化部署,也支持在Arch Linux、Heroku或Fly.io上手动部署。
10.OpenSearch
开源地址:https://github.com/opensearch-project/OpenSearch
开发语言:Java
OpenSearch是一个开源分布式和RESTful搜索引擎。它是Elasticsearch和Kibana的开源分支。
11.Qdran
开源地址:https://github.com/qdrant/qdrant
开发语言:Rust
Qdrant是面向AI的高性能、大规模向量数据库。它包含一个向量相似性搜索引擎和向量数据库。开箱即用,提供方便的API,用于存储、搜索和管理向量。Qdrant是专为过滤支持而定制的。这使得它对各种神经网络或基于语义的匹配、分面搜索和其他应用程序都很有用。
12.Vespa——大数据搜索引擎
开源地址:https://github.com/vespa-engine/vespa
开发语言:Java、C++、Go
Vespa是开放式大数据服务引擎,可存储、搜索、组织大数据并进行机器学习推理。可在任何服务时间和规模下搜索向量、张量、文本和结构化数据。
13.TNT Search
开源地址:https://github.com/teamtnt/tntsearch
开发语言:PHP
TNTSearch是一个开源的全文搜索引擎。它完全用使用PHP开发,具有高度的可移植性和易用性,能够与PHP应用程序集成。
TNTSearch最主要的功能之一是支持词干分析,这使得搜索结果更加准确和有效。支持多种语言的词干分析,包括英语、克罗地亚语、阿拉伯语、意大利语、俄语、葡萄牙语和乌克兰语。这意味着用户可以用他们的母语搜索关键字,获得准确的结果。
此外,TNTSearch还提供了一系列配置选项,以满足用户的特定需求。可配置数据库类型,自定义索引过程,甚至实现自己的搜索算法。
14.miniSearch
开源地址:https://github.com/lucaong/minisearch
开发语言:JavaScript、TypeScript
MiniSearch是一个用JavaScript编写的小型内存全文搜索引擎。可以在Node或者浏览器中运行。
15.tinysearch
开源地址:https://github.com/tinysearch/tinysearch
开发语言:Rust
tinysearch是一个轻量级的、快速的全文搜索引擎。主要用于静态网站内容检索。tinysearch是用Rust编写的,然后编译成WebAssembly在浏览器中运行。
16.Monocle
开源地址:https://github.com/thesephist/monocle
开发语言:JavaScript
Monocle是一个静态的单页Web应用程序,从预构建的文档索引运行。索引系统和Web应用程序本身都是用Ink编写的。
下面是Monocle的架构图:
17.YaCy
开源地址:https://github.com/yacy/yacy_search_server
开发语言:Java
YaCy是一个P2P(点对点)搜索引擎,允许用户搜索互联网上的信息。与传统搜索引擎不同,YaCy不依赖于集中式服务器来存储和索引数据。相反,它使用分布式节点网络来索引,并在用户之间共享数据。
搜索引擎的发展趋势
随着人工智能的发展,我们使用网络和知识的方式正在改变,AI为搜索引擎提供了大量的功能,开始彻底改变我们的搜索方式。其中生成式AI和聊天机器人正在改变搜索体验,打造高度个性化、对话式和直观的方法。通过利用人工智能功能,搜索引擎可以产生相关和可靠的结果,同时根据个人偏好提供量身定制的建议。