惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
H
Help Net Security
Jina AI
Jina AI
V
V2EX
G
Google Developers Blog
B
Blog
GbyAI
GbyAI
U
Unit 42
爱范儿
爱范儿
腾讯CDC
Engineering at Meta
Engineering at Meta
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
小众软件
小众软件
D
DataBreaches.Net
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
博客园 - 聂微东
The Cloudflare Blog
I
InfoQ
Microsoft Azure Blog
Microsoft Azure Blog
Hugging Face - Blog
Hugging Face - Blog
大猫的无限游戏
大猫的无限游戏

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解
【Azure AI Search】 stopword 是什么,为什么它会影响搜索结...
编码者卢布 · 2026-06-16 · via 博客园_首页

问题描述

在 Azure AI Search 中搜索 in brief 时,结果数量有时会比预期多很多。仔细查看返回结果文本,会发现有些文档和 brief 的关系很弱,反而只是命中了 in 这类高频词。

image

这不是数据问题,也不是 Azure AI Search 的 bug。关键在于一个很容易被忽略的地方:in 这类词在索引和查询时,到底有没有被当作普通 token 处理。

问题解答

1. stopword 是什么

stopword(停用词)是在自然语言中高频出现、但对区分文档贡献较低的词。

英文里常见的 stopword 包括:

a  an  the  in  of  and  to  is  for  with  on  at

这类词不是“永远没有意义”,而是在大多数全文检索场景里区分度较低。

几乎每篇文档都可能含有 intheof,用它们做关键词既不能帮助筛选相关内容,也容易把大量无关文档带进结果。

因此在传统全文检索里,stopword 通常会在索引阶段和查询阶段一起被移除,让搜索结果更聚焦于真正有区分度的词。

2. stopword 是否被移除,由 analyzer 决定

Azure AI Search 里,stopword 不是全局开关,而是 analyzer 行为的一部分。

字段建索引时,文本会先被 analyzer 拆成 token,查询时,搜索词也会经过 analyzer。只有两边生成的 token 能对上,才可能命中。

  • 对默认 standard.lucene 来说,英文 stopword 不会像语言 analyzer 那样被自动移除。in brief 会被保留成两个 token:inbrief,都参与倒排索引匹配。因为 in 在几乎所有英文文档里都存在,搜索结果会被大量无关文档拉宽——这不是 bug,是默认 analyzer 本来的行为。
  • 换成 en.microsoft 后,in 会作为英文 stopword 被移除,in brief 的有效 token 只剩 brief。结果通常会更聚焦,但前提是这些 stopword 在业务语义里确实不重要。

所以正确的问题不是"Azure AI Search 是否支持 stopword",而是:当前字段用的是什么 analyzer,它会不会移除 stopword?

3. 实验对比(使用Analyze Text API查看结果)

调用Analyze Text API接口:

POST https://<your AI Search name>.search.azure.cn/indexes/<index name>/analyze?api-version=2026-04-01

Body:

# 第一轮
{
  "text": "in brief",
  "analyzer": "standard.lucene"
}

# 结果 -- in 没有被过滤
{
  "@odata.context": "https://xxxxxxx.search.azure.cn/$metadata#Microsoft.Azure.Search.V2026_04_01.AnalyzeResult",
  "tokens": [
    {
      "token": "in",
      "startOffset": 0,
      "endOffset": 2,
      "position": 0
    },
    {
      "token": "brief",
      "startOffset": 3,
      "endOffset": 8,
      "position": 1
    }
  ]
}

# 第二轮
{
  "text": "in brief",
  "analyzer": "en.microsoft"
}

#结果 -- in 被当作英文 stopword 移除
{
  "@odata.context": "https://xxxxxxx.search.azure.cn/$metadata#Microsoft.Azure.Search.V2026_04_01.AnalyzeResult",
  "tokens": [
    {
      "token": "brief",
      "startOffset": 3,
      "endOffset": 8,
      "position": 1
    }
  ]
}

这个对比能直接说明两种 analyzer 下搜索结果数量不同的原因:最终参与匹配的 token 不一样。

结果对比图:

image

参考资料

停用词:https://learn.microsoft.com/zh-cn/azure/search/reference-stopwords#english-enmicrosoft

Index Analyze : https://learn.microsoft.com/zh-cn/rest/api/searchservice/indexes/analyze?view=rest-searchservice-2026-04-01&tabs=HTTP#searchserviceindexanalyze