回到主页Meilisearch 的标志
返回文章
2025年3月4日

什么是语义搜索?工作原理、用例及更多

了解什么是语义搜索、它的工作原理、主要应用、优缺点、如何实现等等。

Ilia Markov
Ilia Markov高级增长营销经理nochainmarkov
What is semantic search? How it works, use cases & more

语义搜索是一种文本搜索方法,它侧重于理解用户查询背后的搜索意图和上下文含义,而不仅仅是匹配关键词。

语义搜索利用机器学习 (ML) 和自然语言处理 (NLP) 技术,并结合查询分析、向量嵌入和知识图等过程,以提供高度相关的结果。

这项技术广泛应用于电子商务、搜索引擎和内部站点搜索等行业,以改善产品发现、内容检索和用户满意度。

语义搜索与向量搜索不同,它使用更广泛的方法,包括文本嵌入、向量搜索方法和知识图来推断用户意图。与依赖精确匹配的关键词搜索不同,语义搜索分析语义和上下文以提供更有意义和更相关的结果。

本文深入探讨了语义搜索,从其基本概念到工作原理、关键应用以及相对于传统搜索方法的优势。无论您是开发人员、机器学习专业人士还是CTO,本文都将为您提供对语义搜索理论和实践方面的全面理解。

什么是语义搜索?

语义搜索是一种基于查询意图和上下文含义来搜索数据的方法。它超越了关键词匹配,并能比词法或句法搜索方法提供更相关的结果。

语义搜索是一种至关重要的搜索方法,因为它弥合了人类思维方式与机器理解自然语言之间的差距。人类意图通常取决于上下文中未以文字表达的语义信息。语义搜索试图识别意图和语义信息,并帮助机器更准确地响应用户查询。

语义搜索不同于句法和词法匹配等传统搜索方法。与句法匹配不同,语义搜索不完全依赖于关键词匹配。相反,它使用先进的方法,如上下文词嵌入、向量相似性、知识图等,来推断查询的语义含义。

例如,如果用户搜索“带好相机且价格实惠的智能手机”,句法搜索引擎只会搜索关键词“实惠”、“好相机”等。

另一方面,语义搜索会理解您想要一部带良好拍照效果的经济型手机。它会优先推荐带有优秀相机功能但价格实惠的手机结果,即使这些结果不包含“实惠”和“好相机”等精确关键词。

既然您已经了解了什么是语义搜索,那么让我们看看它是如何检索最相关结果的。

语义搜索如何工作?

语义搜索涉及以下一个或多个步骤

  • 查询分析:语义搜索将查询分解为其基本组成部分,包括关键词、实体和短语。查询分析涉及NLP方法,如分词、词性标注和命名实体识别。例如,在查询“最适合游戏的笔记本电脑”中,NLP将“笔记本电脑”识别为主要实体,“游戏”识别为意图驱动因素。通过理解这些关系,例如对高内存、处理能力和GPU功能的需求,搜索可以推断出超出字面查询的意图。
  • 向量嵌入:通过查询分析识别的关键词和短语使用向量嵌入方法投射到高维向量空间中。向量嵌入涉及先进的深度学习模型,如BERTword2vec,以生成文本的数值表示。通过向量嵌入,相似的词语如“游戏”和“GPU”在高维空间中被放置在一起,从而实现语义理解。
  • 计算向量相似性:在此步骤中,使用余弦相似度等技术匹配查询和文档的高维嵌入向量。这些技术测量高维空间中向量之间的角度,识别与查询意图最紧密对齐的文档。这确保了结果不限于精确的关键词匹配,而是包含概念上相关的文档。
  • 知识图:知识图创建了一个包含语义信息的结构化网络。它将文本信息表示为图中的节点和边。虽然向量嵌入捕捉语义相似性,但知识图通过链接相关概念来增加一层上下文和推理。例如,知识图可以将“笔记本电脑”连接到“处理器”、“RAM”和“GPU”,建立增强查询理解的关系。Neo4j等图数据库常用于语义搜索的知识图实现。
  • 结果重排序:通过向量相似性搜索或知识图检索到的文档根据语义相关性、用户上下文和偏好进行重排序,确保最相关的响应首先显示。推荐系统和排序算法常用于重排序步骤。

语义搜索的用例有哪些?

语义搜索在电子商务、搜索引擎到医疗保健和教育等多种行业中都有应用。

下图展示了语义搜索的主要用例。

Semantic Search Use Cases.png

我们将在以下部分讨论三个主要的语义搜索用例。

电子商务

语义搜索通过更好地理解查询的含义来改善电子商务应用中的产品发现。即使搜索词不精确,它也可以帮助检索最准确和相关的结果。

例如,对于“耐用型徒步背包”这样的查询,语义搜索将检索由坚固材料、加固缝线和多个隔层制成的背包结果,即使关键词不完全匹配。

Meilisearch 等平台将语义搜索集成到电子商务应用中,为搜索查询返回极速结果,改善客户体验,并促进销售。

搜索引擎

语义搜索彻底改变了搜索引擎检索和排名用户搜索查询结果的方式。

例如,如果用户搜索“我附近最好的徒步地点”,传统搜索引擎会返回包含查询中关键词的结果。

另一方面,由语义搜索驱动的搜索引擎会理解用户想要了解用户地理位置附近、用户评价良好且提供露营和观光等活动的徒步地点。

image5.png

来源

语义搜索也非常适合驱动推荐。在上述示例中,搜索引擎理解“漫威”既与漫威电影宇宙相连,也与漫画改编电影类型相连,因此可以向用户推荐这两者的示例。

内部站点搜索

语义搜索通过帮助用户快速找到最相关的信息来增强内部站点搜索。

例如,大型组织中的员工可能会在公司内网上搜索“年假政策”。传统搜索可能会返回包含关键词“年”、“假”和“政策”的结果,即使这些结果不包含任何关于年假政策的信息。

然而,语义搜索引擎会理解用户搜索人力资源文件中详细的请假政策的意图,并返回相应的人力资源文件。

语义搜索有哪些示例?

大多数需要搜索能力的高级应用程序都嵌入了语义搜索,以提供最相关的结果,从而改善客户体验。

语义搜索的一些示例包括

视频流媒体网站:Netflix、Amazon Prime 和 Disney Hotstar 等视频流媒体网站实施语义搜索,以检索与用户查询最匹配的响应。您经常会看到Netflix在您搜索的电影不可用时推荐类似电影。Netflix 了解您搜索特定类型电影的意图。

电子商务网站亚马逊是实施语义搜索以针对用户查询返回最相关产品的一个典型电子商务网站。例如,如果您搜索“最佳游戏笔记本电脑”,亚马逊会返回具有高性能GPU、快速处理和充足RAM的笔记本电脑,因为亚马逊了解游戏笔记本电脑必须具备这些规格。

image7.png

旅游网站:语义搜索为Booking.comExpedia等旅游网站提供支持,根据搜索者的意图推荐目的地、酒店或活动。例如,搜索“最适合家庭的滑雪度假村”将返回提供良好医疗保健和家庭友好氛围的度假村,即使这些结果不包含搜索的关键词。

在下一节中,您将看到语义搜索相对于传统搜索方法的一些优势。

语义搜索有哪些优势?

语义搜索比传统搜索方法具有多项优势,如下图所示

Benefits of Semantic Search.png

让我们深入探讨这些优势

  • 提高结果相关性:语义搜索通过更好地理解用户意图和查询上下文来提高搜索结果的相关性。
  • 增强用户体验:语义搜索通过检索更相关的结果来改善用户体验。即使查询不完整或不明确,语义搜索也能比传统搜索方法检索到更准确的响应。
  • 个性化:语义搜索结合过去的搜索、用户偏好和位置数据,为用户查询提供更个性化的响应
  • 跨语言理解:语义搜索可以理解一种语言的查询并以另一种语言返回响应,从而弥合语言障碍。
  • 可扩展性和效率:由于采用向量嵌入和向量相似性搜索等先进的机器学习和自然语言处理方法,语义搜索非常适合从小型网站到企业应用的所有应用程序。

虽然语义搜索有优势,但它也有一些缺点,我们将在下文讨论。

语义搜索有哪些缺点?

语义搜索伴随着特定的挑战和局限性,如下图所示

Disadvantages of Semantic Search.png

让我们详细阐述这些挑战。

  • 复杂性:语义搜索方法包含了复杂的机器学习和自然语言处理方法。自行实现语义搜索系统可能既复杂又耗时。
  • 资源密集型:语义搜索应用程序依赖于机器学习和自然语言处理技术,这需要大量的计算能力才能运行。
  • 需要高质量数据:语义搜索解决方案需要高质量、经过良好标注的数据集进行训练。质量差的数据集可能导致性能不佳,影响搜索结果的准确性和相关性。
  • 隐私问题:语义搜索系统通常依赖个人用户数据,例如搜索历史、偏好、位置和行为模式,以提高相关性和个性化。然而,这可能导致隐私问题。产品经理、数据工程师和法务团队必须协作,以确定语义搜索系统被授权访问个人数据的程度,同时确保符合GDPRCCPA法规。

开发内部语义搜索解决方案可能成本高昂、耗时且资源密集。像Meilisearch这样的工具为在您的应用程序中集成语义搜索提供了开箱即用的解决方案,节省您的时间和人力。

下一节将向您展示如何使用 Meilisearch 实现语义搜索解决方案。

如何实现语义搜索?

本教程将指导您通过三个简单步骤使用 Meilisearch Python SDK 构建语义搜索

  • 注册 Meilisearch Cloud 以获取 API 密钥。
  • 在本地设置 Meilisearch 实例(可选)。
  • 开发一个 Python 脚本来上传文档并执行语义查询。

我们将使用一个包含 30 本不同书籍信息的 JSON 文件。然后,我们将利用 Meilisearch 的功能从向量数据库中进行语义查询,以获得准确的输出。让我们看看如何实现。

注册 Meilisearch Cloud

要将语义搜索集成到您的工作流中,请创建一个免费的 Meilisearch Cloud 帐户,享受 14 天试用期。您可以使用 GitHub、Google 或工作邮箱轻松注册。注册后,您将立即获得使用以下任一计划启动您的第一个项目的权限。

image8.png

选择计划后,您将获得项目详细信息和 API 密钥。主密钥对于将 Meilisearch 连接到您的本地环境至关重要。

在本地设置 Meilisearch 实例

请注意,此步骤不是强制性的。您可以将 Meilisearch 云作为您的服务器;但是,出于开发目的,最好先在本地机器上测试工作流。在您的计算机上安装实例可以为您提供更大的自由度来构建和无缝添加文档。让我们从在本地安装 Meilisearch 开始

# Install Meilisearch
curl -L https://install.meilisearch.com | sh

安装后,您将看到以下消息

image3.png

现在,您应该能够使用您的主 API 密钥通过以下命令启动 Meilisearch

# Launch Meilisearch
./meilisearch --master-key="a864f…c"

您将收到以下消息,表示您的机器正在运行 Meilisearch 实例

image2.png

本指南将使用 Python SDK 包将文档上传到我们刚刚创建的 Meilisearch 实例。如果您想继续使用 cURL 命令和其他编程语言,可以遵循本教程

使用 Python 上传和检索信息

以下步骤应在 Meilisearch 实例激活后执行。因此,最好打开第二个终端来安装依赖项并运行 Python 代码。首先,我们必须通过 pip 安装 Meilisearch Python 包

pip3 install meilisearch

我们需要上传将要嵌入和查询的文档。在此示例中,我们正在为书籍构建语义搜索。我们将使用一个 JSON 文件,其中包含用于索引的基本详细信息,包括标题、描述、类型和用于精确索引的 ID。以下是我们将要嵌入的 JSON 文件的预览

{
  "books": [
    {
      "id": 1,
      "title": "The Great Gatsby",
      "description": "A story of decadence and excess, following the mysterious millionaire Jay Gatsby and his obsession with the beautiful Daisy Buchanan.",
      "genre": "Literary Fiction"
    },
    {
      "id": 2,
      "title": "Dune",
      "description": "Set in a distant future, the story follows Paul Atreides, whose family accepts stewardship of the dangerous desert planet Arrakis.",
      "genre": "Science Fiction"
    },
    {
      "id": 3,
      "title": "The Hobbit",
      "description": "A fantasy novel about the adventures of hobbit Bilbo Baggins, who embarks on a quest to help a group of dwarves reclaim their mountain home.",
      "genre": "Fantasy"
    }
}

目前,创建向量存储以上传文档仍是一项实验性功能。为避免运行上述脚本时出错,您必须首先执行以下脚本

import requests

token = "a864f...c"
requests.patch(
    f"http://localhost:7700/experimental-features",
    headers={"Authorization": f"Bearer {token}"},
    json={"vectorStore": True},
    timeout=10,
)

向量存储激活后,我们将能够使用 Langchain Python 库创建并将文档嵌入到数据库中

pip install langchain-community langchain_openai

使用 Langchain,我们可以通过 `JSONLoader` 生成文档,并借助嵌入器存储它们,因为我们希望创建语义搜索并获得超越基本相似性和其他数学运算的上下文响应。最好使用更高级的嵌入模型,例如 OpenAI 的 `text-embedding-3-small`,它非常适合需要高精度和嵌入大型文件的任务。

import os
from langchain_community.vectorstores import Meilisearch
from langchain_openai import OpenAIEmbeddings
from langchain_community.document_loaders import JSONLoader

# Load environment variables
os.environ["MEILI_HTTP_ADDR"] = "http://localhost:7700/"
os.environ["MEILI_MASTER_KEY"] = "a864f…c"

# Load documents
loader = JSONLoader(
    file_path="books.json",
    jq_schema=".[] | {id: .id, title: .title, description: .description, genre: .genre}",
    text_content=False,
)
documents = loader.load()
print(f"Loaded {len(documents)} documents")

# Initialize embeddings
embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small",
    api_key="sk…A")

# Configure embedders
embedders = {
    "openai": {
        "source": "openAi",
        "apiKey": "sk…A",
        "dimensions": 1536,
        "documentTemplate": "A book with the name {{doc.title}}.",
        "model": "text-embedding-3-small"
    }
}
embedder_name = "openai"

# Store documents in Meilisearch
vector_store = Meilisearch.from_documents(
    documents=documents,
    embedding=embeddings,
    embedders=embedders,
    embedder_name=embedder_name)
  

通过运行上述脚本,我们获得了一个 `vector_store` 对象,该对象将用于查询数据库。此外,如果您检查您的 Meilisearch 服务器,所有文档应该已经上传完毕。

image12.png

每个文档代表一个包含 JSON 文件中字段的单独记录。文档被组织成索引,就像集合一样。在本例中,我们将使用索引 `langchain-demo`。如果您想上传到您的 Meilisearch Cloud,只需将 `MEILI_HTTP_ADDR` 替换为您的项目在云仪表板中的 URL 即可。

要基于语义含义查询向量空间,我们只需使用之前创建的 `vector_store` 对象并应用相似性搜索。

query = "I'm looking for a book with star wars vibes"

result = vector_store.search(
    query,
    opt_params={"hybrid": {"semanticRatio": 1.0, "embedder": "openai"}},
    search_type="similarity", embedder_name="openai", k=5)

如果您想要更多结果,可以增加“k”的数量。对于此查询,输出的书籍是

{"id": 11, "title": "Foundation", "description": "A mathematician develops a science to predict the future behavior of large populations and foresees the collapse of the Galactic Empire.", "genre": "Science Fiction"}
{"id": 2, "title": "Dune", "description": "Set in a distant future, the story follows Paul Atreides, whose family accepts stewardship of the dangerous desert planet Arrakis.", "genre": "Science Fiction"}
{"id": 17, "title": "The Shadow of the Wind", "description": "In post-war Barcelona, a young boy discovers a mysterious book that leads him into a labyrinth of secrets and buried mysteries.", "genre": "Historical Fiction"}
{"id": 6, "title": "1984", "description": "A dystopian social science fiction novel that follows Winston Smith and his rebellion against the totalitarian government that controls their society.", "genre": "Dystopian Fiction"}
{"id": 21, "title": "Red Rising", "description": "A lowborn miner infiltrates the elite class of a color-coded society on Mars to bring about revolution.", "genre": "Science Fiction"}

正如您所看到的,所有输出都没有明确提及《星球大战》,但嵌入模型有效地捕捉了查询和向量空间中文档的上下文含义。这导致了五本与输入非常接近的书籍。

哪种语义搜索模型最好?

最佳语义搜索模型取决于性能、成本、隐私和基础设施要求。

语义搜索模型可分为两类

专有模型

专有语义搜索模型是付费解决方案,通常部署在模型开发者提供的云平台上。例如,OpenAI 提供最先进的语义搜索模型,包括“text-embedding-3-small”和“text-embedding-3-large”。同样,Cohere 的“embed-multi-language”和“embed-english”模型也表现良好。

虽然专有模型提供卓越的性能,但它们通常需要将您的数据上传到提供商的服务器,例如 OpenAI 的云基础设施。此外,这些模型可能很昂贵。

开源模型

开源语义模型为语义搜索实现提供了一种可访问、安全且经济高效的方法。根据MTEB 排行榜,一些开源模型在各种基准测试中与专有模型表现相当。

开源模型的唯一缺点是您可能需要部署自己的基础设施才能在本地运行它们。一些标准的开源语义搜索模型包括NV-Embed-v2gte-Qwen2-7B-instructbge-large-en-v1.5

选择最佳语义搜索模型取决于相关性、搜索性能、索引速度和成本。像 Cohere 和 OpenAI 这样的云服务因其易用性和高相关性而表现出色。本地部署的开源模型免费使用,并提供最快的搜索延迟,但可能在有限硬件上遇到性能和索引挑战。

最终,最佳语义搜索模型取决于您的用例、预算和性能需求。对于许多应用程序来说,基于云的解决方案是一个很好的起点。

语义搜索与关键词搜索有何不同?

语义搜索和关键词搜索在信息检索方式上存在显著差异。关键词搜索依赖于查询和数据集之间的精确词或短语匹配,而语义搜索则使用先进的机器学习和自然语言处理方法来解释用户意图和上下文。

语义搜索和关键词搜索的主要区别如下所示

语义搜索关键词搜索
分析用户意图和查询上下文依赖精确的关键词或短语匹配
可以处理同义词和相关术语需要精确短语匹配,无法根据同义词和相关术语返回结果
使用高级自然语言处理技术,如嵌入和向量相似性搜索采用句法规则进行词语匹配

语义搜索与词法搜索有何不同?

语义搜索和词法搜索之间的差异与语义搜索和关键词搜索之间的差异相似。词法搜索使用精确的关键词或字符匹配来检索结果。语义搜索依赖于机器学习和自然语言处理技术。

语义搜索和词法搜索之间的主要区别如下所示

语义搜索词法搜索
提取用户意图和上下文匹配查询中的确切单词或序列
识别同义词和相关术语不基于同义词和相关词匹配检索结果

语义搜索与上下文搜索有何不同?

上下文搜索依赖于用户的上下文信息,例如位置和历史记录,以检索最相关的结果。虽然语义搜索主要通过机器学习技术提取用户意图,但它也可以结合上下文信息来检索相关文档。

语义搜索和上下文搜索之间的主要区别如下:

语义搜索上下文搜索
专注于理解用户意图使用位置和过往对话等外部信息
依赖机器学习和自然语言处理方法利用用户特定的元数据提供情境化结果

语义搜索与向量搜索有何不同?

语义搜索和向量搜索具有某些共同特征,但在范围和应用上有所不同。向量搜索,如前一节所述,将文本表示为高维数学向量,以使用K近邻、欧几里得或曼哈顿距离等技术计算向量相似性。

下图显示了向量搜索涉及的步骤

Flowchart for Semantic search.png

相反,语义搜索的范围更广。它可能包含向量搜索以及其他技术,例如知识图和文本嵌入,以识别用户意图并检索最相关的结果。

语义搜索和向量搜索之间的主要区别如下所示

语义搜索向量搜索
一个更广泛的概念,可能包括用于用户意图检测的向量搜索一种用于向量之间相似性搜索的特定数学技术
使用多种技术,如文本嵌入、知识图和向量相似性主要使用高维向量嵌入
侧重于理解查询和文档之间的含义和关系侧重于比较向量距离
基于意图和上下文回答查询基于数学相似性回答查询

虽然语义搜索采用更广泛的上下文感知方法进行信息检索,但向量搜索在特定用例中比语义搜索具有多项优势。

例如,向量搜索非常适合需要查询和索引文档之间精确相似性的应用程序,例如推荐引擎或图像搜索。此外,由于向量搜索涉及数学运算,因此它对于大型数据集可以快速扩展。最后,它的单一性质——将数据表示为高维向量——使其比语义搜索等多方面方法更容易实现。

Meilisearch 提供最先进的工具来在您的应用程序中实现向量搜索

以下脚本解释了如何使用 Meilisearch 实现向量搜索。

from langchain_community.vectorstores import Meilisearch
from langchain_huggingface.embeddings import HuggingFaceEmbeddings
from langchain_community.document_loaders import JSONLoader

# Load environment variables
os.environ["MEILI_HTTP_ADDR"] = "http://localhost:7700/"
os.environ["MEILI_MASTER_KEY"] = "a864f...c"

# Load documents
loader = JSONLoader(
    file_path="books.json",
    jq_schema=".[] | {id: .id, title: .title, description: .description, genre: .genre}",
    text_content=False,
)
documents = loader.load()
print(f"Loaded {len(documents)} documents")

# Initialize embeddings
embeddings = HuggingFaceEmbeddings(
    model_name="sentence-transformers/all-MiniLM-L6-v2")

# Configure embedders
embedders = {
    "custom": {
        "source": "userProvided",
        "dimensions": 384
    }
}
embedder_name = "custom"

# Store documents in Meilisearch
vector_store = Meilisearch.from_documents(
    documents=documents,
    embedding=embeddings,
    embedders=embedders,
    embedder_name=embedder_name)

现在,我们可以使用与之前语义搜索相同的查询,并比较两个结果

query = "I'm looking for a book with star wars vibes"

result = vector_store.similarity_search(
    query,
    embedder_name='custom', k=5)

输出结果为

{"id": 17, "title": "The Shadow of the Wind", "description": "In post-war Barcelona, a young boy discovers a mysterious book that leads him into a labyrinth of secrets and buried mysteries.", "genre": "Historical Fiction"}
{"id": 2, "title": "Dune", "description": "Set in a distant future, the story follows Paul Atreides, whose family accepts stewardship of the dangerous desert planet Arrakis.", "genre": "Science Fiction"}
{"id": 29, "title": "Hyperion", "description": "Seven pilgrims embark on a final mission to the mysterious Time Tombs on the world of Hyperion, each with a desperate hope to save humanity.", "genre": "Science Fiction"}
{"id": 22, "title": "The Seven Husbands of Evelyn Hugo", "description": "An aging Hollywood starlet finally tells the true story of her scandalous life and seven marriages.", "genre": "Historical Fiction"}
{"id": 7, "title": "The Da Vinci Code", "description": "A mystery thriller that follows symbologist Robert Langdon as he investigates a murder in Paris's Louvre Museum.", "genre": "Thriller"}

将上述输出与在语义搜索设置期间使用 OpenAI 嵌入模型生成的输出进行比较,很明显 Hugging Face 模型在捕捉上下文方面效果较差。虽然两者都依赖向量相似性进行搜索,但它们对上下文的解释不同。因此,两者都符合语义搜索的条件,但其中一个提供了比另一个更深层次的上下文理解。

使用 Meilisearch 实现下一代搜索

语义搜索是一种先进的文档搜索技术,它依赖于用户意图和上下文来检索相关结果。

在您的应用程序中实现强大的搜索功能可能很麻烦。幸运的是,Meilisearch 提供了开箱即用的功能,可以在您的应用程序中实现闪电般快速且用户友好的搜索引擎。Meilisearch 提供一个 REST API,可在不到 50 毫秒的时间内返回极速响应。

Meilisearch 的一些主要功能包括

  • 快速性能:在 50 毫秒内返回搜索结果,为用户查询提供即时响应。
  • 随键入搜索:每次击键都会更新结果,提供动态响应的搜索体验。
  • 容错性:识别并纠正拼写错误,确保用户即使输入错误也能找到相关结果。
  • 全面的语言支持:针对多种语言进行优化,包括中文、日语、希伯来语以及使用拉丁字母的语言。
  • AI 驱动的混合搜索:结合全文搜索和语义搜索,提高搜索结果的准确性和全面性。
  • 云端和自托管解决方案:您可以通过 Meilisearch API 使用 Meilisearch 云,或在您的系统上自托管 Meilisearch AI 引擎,从而完全控制您的数据。

立即改变您的搜索体验

快速性能、多语言支持、AI 驱动的混合搜索等等。Meilisearch 拥有您将搜索提升到新水平所需的一切。

How to build a search engine in PHP: Step-by-step guide

如何在 PHP 中构建搜索引擎:分步指南

通过本实用的分步教程,了解如何在 PHP 中轻松构建搜索引擎。

Ilia Markov
Ilia Markov2025年6月5日
Building a JavaScript Search Engine: Tutorial, Examples & More

构建 JavaScript 搜索引擎:教程、示例及更多

通过本实用的分步教程,了解如何在 JavaScript 中轻松构建搜索引擎。

Ilia Markov
Ilia Markov2025年6月3日
How to Make a Search Engine in Python: Step-by-Step Tutorial

如何用 Python 制作搜索引擎:分步教程

通过本详细的分步教程,了解如何轻松用 Python 制作搜索引擎。

Ilia Markov
Ilia Markov2025年5月29日