【Azure AI Search】Index的字段使用默认Analyzer(standard.lucene) 和 en.microsoft 有什么不同?

简介: Azure AI Search英文检索因词形差异(如brief/briefs)无法匹配,根源在于analyzer选择:默认standard.lucene不处理词形还原,而en.microsoft支持lemmatization,可将变体还原为基本形式。需通过新增字段并配置en.microsoft analyzer解决,兼顾检索质量与业务需求。

问题描述

在 Azure AI Search 里,英文检索有时会卡在一个很小的词形差异上:文档里是 brief,搜索 briefs 却搜不到。

搜索 briefs,无法命中只包含 brief 的文档。类似地,audit 和 auditing 也可能因为一个复数形式导致结果不同。

文档明明在,关键词也只差一个 s 或 ing,为什么结果完全不一样?

关键不在原文,而在 Azure AI Search 最终拿什么 token 去匹配。

通俗来讲,是根据字符串文本匹配还是基于语义进行匹配!

 

问题解答

Azure AI Search 做全文检索时,比较的不是原始字符串,而是 analyzer 处理后的 token。

briefbriefs 能不能互相命中,关键看字段使用默认 analyzer(standard.lucene),还是使用 en.microsoft 这类语言 analyzer。

1: standard.lucene 不处理英文词形

standard.lucene 是默认 analyzer。它主要做分词和小写化,不做英文词干还原,也不做词形还原。

输入  token
brief  brief
briefs  briefs
auditing  auditing

所以 briefs 搜不到 brief,不是数据缺失,也不是服务异常,而是两边生成的 token 本来就不一样。\

 

2: en.microsoft 按语言规则做词形还原

en.microsoft 使用 lemmatization。它不是简单截断词尾,而是尽量把变化形式还原成语言学上的基本形式。

例如:

briefs → brief

auditing → audit

它通常更适合重视英文检索质量的场景,尤其是需要处理单复数、时态、不规则变化时。

代价是索引速度通常会慢一些,但普通查询性能一般不会明显受影响

 

3: 如何选择

Analyzer 主要行为 适合场景
standard.lucene 分词、小写,不做词形归一 通用字段、需要保留原始词形差异
en.microsoft Lemmatization,按语言规则还原词形 重视英文搜索质量,希望处理单复数和时态

如果英文内容需要处理单复数、时态或不规则变化,优先验证 en.microsoft。如果业务明确需要保留词形差异,继续使用默认 standard.lucene 更合适。

 

4:修改 analyzer

analyzer 是字段定义的一部分。已有字段不能直接就地修改 analyzer。如果要从 standard.lucene 换成 en.microsoft,通常需要重建索引,或者新增一个使用新 analyzer 的并行字段,再通过 searchFields 切过去验证。

如下图所示(无法修改Analyzer)

添加新的索引字段并设置Analyzer步骤

1:添加新的查询字段

步骤如下:

  • 选中索引,进入Fields Tab页,点击添加字段。
  • 输入新的字段名, 如: content_ext
  • 勾选 Retrievable 和 Searchable
  • 选择Analyzer为 English - Microsoft (* 重要)
  • 保存修改

2:把查询字段和文档的内容进行关联

步骤如下:

  • 进入对应的索引器,点击 Edit JSON案例
  • 在fieldMappings中,添加content / content_ext 的mapping关系后保存

添加内容:


{
      "sourceFieldName": "content",
      "targetFieldName": "content_ext",
      "mappingFunction": null
},

参考截图如下:

3:修改查询文档属性后,执行索引器,为新字段填充内容

运行索引器,把文档的content内容填充到index的content_ext字段中。

这一步需要注意,让blob的文档的最后修改时间发生变动后,在执行文档索引器的时候,才会加载这些变动的文档内容。

 

执行以上操作之后,对比验证使用默认Analyzer和en.microsoft的查询结果区别

 

参考资料

用于 Azure AI 搜索的文本处理分析器:https://learn.microsoft.com/zh-cn/azure/search/search-analyzers

向 Azure AI 搜索索引中的字符串字段添加语言分析器: https://learn.microsoft.com/zh-cn/azure/search/index-add-language-analyzers

更新或重新生成索引 :https://learn.microsoft.com/zh-cn/azure/search/search-howto-reindex?tabs=sdk-python%2Cportal

Indexes - Analyze - REST API (Azure Search Service) : https://learn.microsoft.com/zh-cn/rest/api/searchservice/indexes/analyze?view=rest-searchservice-2026-04-01&tabs=HTTP




当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
2月前
|
人工智能 自然语言处理 API
【Azure AI Search】 stopword 是什么,为什么它会影响搜索结果?
本文解析 Azure AI Search 中搜索 "in brief" 返回结果过多的问题,指出根源在于 analyzer 对停用词(如 "in")的处理差异:默认 `standard.lucene` 保留停用词导致泛匹配,而 `en.microsoft` 会过滤停用词,使结果更精准。关键在于根据业务语义选择合适 analyzer。
232 121
|
2月前
|
Web App开发 iOS开发
苹果自带浏览器展示不了钉钉二维码
使用window.DTFrameLogin函数,在safari不展示二维码
274 122
|
Web App开发 监控 测试技术
|
缓存 Linux 调度
24小时学通Linux内核之电源开和关时都发生了什么
  说实话感觉自己快写不下去了,其一是有些勉强跟不上来,其二是感觉自己越写越差,刚开始可能是新鲜感以及很多读者的鼓励,现在就是想快点完成自己制定的任务,不过总有几个读者给自己鼓励,很欣慰的事情,不多感慨了,加紧时间多多去探索吧,今天要去描述的是电源开和关时都发生了什么,一起去看看吧~~   bootloader引导装入程序将内核映像加载到内存并处理控制权传送到内核后在内核引导时每个子系统都必须要初始化,我们根据实际执行的线性顺序跟踪内核的初始化过程,下图说明了从系统加电到断电这一过程中所有事情发生的顺序,这个图不多加解释了,看图就知道其线性执行顺序,中间过程也是很简单的步骤啦。
|
JavaScript
Lazy Load Plugin for jQuery延迟加载测试成功
一直需要的功能,网页图片太多时对于降低网络流量超有用。 最新的V1.9.3版本其实已不用修改就可以起作用了。 不用网上说的要自己修改代码。
1161 123
|
移动开发
[LeetCode] Find the Duplicate Number
There are mainly two solutions to solve this problem. The first one is very clever, using the idea of cycle detection, and runs in O(n) time.
1158 120
2009年下半年11月份系统架构设计师上午试题以及参考答案之五
2009年下半年11月份系统架构设计师上午试题以及参考答案之五 ● 电子数据交换(EDI)是电子商务活动中采用的一种重要的技术手段。以下关于EDI的叙述中,错误的是__(20)__。 (20)A. EDI的实施需要一个公认的标准和协议,将商务活动中涉及的文件标准化和格式化       B. EDI的实施在技术上比较成熟,成本也较低       C. EDI通过计算机网络,在贸易伙伴之间进行数据交换和自动处理       D. EDI主要应用于企业与企业、企业与批发商之间的批发业务 D中的“批发业务”有问题 参考答案:D   ● 用户文档主要描述所交付系统的功能和使用方法。
1167 120