Azure 搜索:搜索单词的单数形式,但结果中仍包含复数形式

Azure Search: Searching for singular version of a word, but still include plural version in results

我对我在自定义分析器(以及 fr.microsoft 分析器)中注意到的一个特殊行为有疑问。下面的 Analyze API 测试是使用“fr.microsoft”分析器显示的,但是当我使用我的“text_contains_search_custom_analyzer”自定义分析器时,我看到了完全相同的行为(这是有道理的,因为我基于它关闭 fr.microsoft 分析器)。

UAT 报告说,当他们搜索“femme”(单数)时,他们希望也能找到带有“femmes”(复数)的文档。但是当我使用 Analyze API 进行测试时,似乎 Azure 搜索服务仅标记复数 -> 复数 + 单数,但在标记单数时,仅使用单数标记。有关示例,请参见下文。

有没有一种方法可以让用户搜索单词的单数形式,但仍然在搜索结果中包含该单词的复数形式?或者我需要使用同义词来解决这个问题吗?

请求“女性” { "analyzer": "fr.microsoft", "text": "femme" }

“女性”的回应 { "@odata.context": "https://EXAMPLESEARCHINSTANCE.search.windows.net/$metadata#Microsoft.Azure.Search.V2016_09_01.AnalyzeResult", "tokens": [ { "token": "femme", "startOffset": 0, "endOffset": 5, "position": 0 } ] }

请求“女性” { "analyzer": "fr.microsoft", "text": "femmes" }

“女性”的回应 { "@odata.context": "https://EXAMPLESEARCHINSTANCE.search.windows.net/$metadata#Microsoft.Azure.Search.V2016_09_01.AnalyzeResult", "tokens": [ { "token": "femme", "startOffset": 0, "endOffset": 6, "position": 0 }, { "token": "femmes", "startOffset": 0, "endOffset": 6, "position": 0 } ] }

您正在使用 Analyze API which uses text analyzers, that is not the same as searching using the Search API

文本分析器在构建索引时支持搜索引擎,而索引实际上位于搜索引擎的底部。为了构建搜索索引,进入其中的文档需要 分析 ,这就是分析器的用武之地。它们可以理解不同的语言并可以解析文本并理解 if,即拆分单词、删除停用词、理解句子等。或者正如他们在文档中所说的那样:https://docs.microsoft.com/en-us/rest/api/searchservice/language-support

Searchable fields undergo analysis that most frequently involves word-breaking, text normalization, and filtering out terms. By default, searchable fields in Azure Search are analyzed with the Apache Lucene Standard analyzer (standard lucene) which breaks text into elements following the "Unicode Text Segmentation" rules. Additionally, the standard analyzer converts all characters to their lower case form.

所以您所看到的实际上是完全正确的,法语分析器分解了您发送的单词和文本中的 returns 可能标记。对于第一个文本,它找不到除 'femme' 之外的任何其他可能的标记(我想在法语中没有像 'fem' 或 'femm' 这样的其他词?),但对于第二个它可以找到'femme' 和 'femmes' 都在里面。

所以,您看到的是文本分析器的自然功能。

另一方面,使用搜索 API 搜索相同的文本 应该 return 包含 'femme' 和 [=33] 的文档=] 在 if 中,您已经为可搜索字段设置了正确的分析器(例如 fr.microsoft)。默认的 'standard' 分析器不处理同一个词的复数形式和其他变形。

只是为了添加到 yoape's 响应中,fr.microsoft 分析器将变形词还原为其基本形式。在您的例子中,单词 femmes 被缩减为单数形式 femme。您描述的所有情况都适用:

  1. 如果文档中有变形形式,则使用单词的基本形式进行搜索。

    假设您正在使用 Vive with Femmes.
    为文档编制索引搜索引擎将对以下术语编制索引:vif, vivre, vive, femme, femmes.
    如果您使用这些术语中的任何一个进行搜索,例如 femme,文档将匹配。

  2. 如果基本形式在文档中,则使用词的变形形式进行搜索。

    假设您正在为包含 teext Femme fatale.
    的文档编制索引搜索引擎将对以下术语编制索引:femme, fatal, fatale.
    如果您使用术语 femmes 进行搜索,分析器也会生成其基本形式。您的查询将变为 femmes OR femme。具有这些术语中的任何一个的文档都将匹配。

  3. 如果文档中有该词的另一种变形形式,则使用变形形式进行搜索。

    如果您的文档包含 allez,术语 allezaller 将被编入索引。
    如果您搜索 alle,则查询变为 alle OR aller。由于两个变形形式都被简化为相同的基本形式,因此文档将匹配。

这里的关键学习是分析器处理文档但也查询术语。术语是针对语言特定规则的规范化说明。

我希望能解释清楚。