我对我在自定义分析器(以及fr.microsoft分析器)中注意到的特殊行为有疑问。下面的Analyze API测试是使用“fr.microsoft”分析器显示的,但是当我使用“text_contains_search_custom_analyzer”自定义分析器时,我看到了相同的确切行为(这是有意义的,因为我基于fr.microsoft分析器)。
UAT报道说,当他们搜索“femme”(单数)时,他们也希望找到带有“femmes”(复数)的文件。但是当我使用Analyze API进行测试时,似乎Azure搜索服务只标记了复数 - >复数+单数,但是当标记单数时,仅使用单数标记。请参阅下面的示例。有没有办法可以让用户搜索单词的单数形式,但仍然在搜索结果中包含该单词的复数形式?或者我需要使用同义词来解决这个问题吗?
请求“femme” { " analyzer":" fr.microsoft", "文字":" femme" }
“femme”的回复 { " @ odata.context":" https://EXAMPLESEARCHINSTANCE.search.windows.net/ $ metadata#Microsoft.Azure.Search.V2016_09_01.AnalyzeResult", "代币":[ { "令牌":" femme", " startOffset":0, " endOffset":5, "位置":0 } ] }
请求“femmes” { " analyzer":" fr.microsoft", " text":" femmes" }
“femmes”的回复 { " @ odata.context":" https://EXAMPLESEARCHINSTANCE.search.windows.net/ $ metadata#Microsoft.Azure.Search.V2016_09_01.AnalyzeResult", "代币":[ { "令牌":" femme", " startOffset":0, " endOffset":6, "位置":0 }, { "令牌":" femmes", " startOffset":0, " endOffset":6, "位置":0 } ] }
答案 0 :(得分:0)
您正在使用使用文本分析器的Analyze API,这与使用Search API进行搜索不同。
文本分析器在构建索引时支持搜索引擎,而索引实际上位于搜索引擎的底层。为了构建搜索索引,需要对其中的文档进行分析,这就是分析器的用武之地。他们可以理解不同的语言,可以解析文本和制作if的意义,即分裂单词,删除停用词,理解句子等。或者他们把它放在文档中:https://docs.microsoft.com/en-us/rest/api/searchservice/language-support
可搜索字段经过分析,最常涉及断字,文本规范化和过滤掉术语。默认情况下,Azure搜索中的可搜索字段使用Apache Lucene标准分析器(标准lucene)进行分析,在“Unicode文本分段”规则之后将文本分解为。此外,标准分析器将所有字符转换为小写形式。
所以你所看到的实际上是完全正确的,法语分析器会分解你发送的单词并从文本中返回可能的标记。对于第一个文本,它找不到任何其他可能的标记而不是'femme'(我想法语中没有其他单词如'fem'或'femm'?),但对于第二个文字,它可以找到'femme'和' femmes'在那里。
因此,您所看到的是文本分析器的自然功能。
另一方面,使用搜索API搜索相同的文本应该返回包含'femme'和'femmes'的文档,如果你设置了正确的用于可搜索字段的分析器(例如fr.microsoft)。默认的“标准”分析器不处理同一个单词的复数和其他变形。
答案 1 :(得分:0)
为了添加yoape's响应,fr.microsoft分析器将变形的单词缩减为基本形式。在您的情况下,单词 femmes 将缩减为单数形式 femme 。您描述的所有案例都有效:
这里的关键学习是分析器处理文档但也查询术语。术语是针对特定语言规则的规范化会计。
我希望能够解释它。