Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure搜索:搜索单词的单数版本,但结果中仍包含复数版本_Azure_Search_Azure Cognitive Search - Fatal编程技术网

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

Azure搜索:搜索单词的单数版本,但结果中仍包含复数版本,azure,search,azure-cognitive-search,Azure,Search,Azure Cognitive Search,我有一个关于我在自定义分析器(以及fr.microsoft分析器)中注意到的一个特殊行为的问题。下面的分析API测试是使用“fr.microsoft”分析器显示的,但我在使用我的“text\u contains\u search\u custom\u analyzer”自定义分析器时看到了相同的行为(这在我基于fr.microsoft分析器时很有意义) UAT报告说,当他们搜索“femme”(单数)时,他们希望也能找到带有“femme”(复数)的文档。但是当我使用Analyze API进行测试时

我有一个关于我在自定义分析器(以及fr.microsoft分析器)中注意到的一个特殊行为的问题。下面的分析API测试是使用“fr.microsoft”分析器显示的,但我在使用我的“text\u contains\u search\u custom\u analyzer”自定义分析器时看到了相同的行为(这在我基于fr.microsoft分析器时很有意义)

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

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

请求带有“femme” { “analyzer”:“fr.microsoft”, “文本”:“女性” }

来自“女性”的回应 { “@odata.context”:“$metadata#Microsoft.Azure.Search.V2016_09_01.AnalyzeResult”, “代币”:[ { “令牌”:“女性”, “startOffset”:0, “内偏移”:5, “位置”:0 } ] }

带有“女性”的请求 { “analyzer”:“fr.microsoft”, “文本”:“女性” }

来自“女性”的回应 { “@odata.context”:“$metadata#Microsoft.Azure.Search.V2016_09_01.AnalyzeResult”, “代币”:[ { “令牌”:“女性”, “startOffset”:0, “内偏移”:6, “位置”:0 }, { “令牌”:“女性”, “startOffset”:0, “内偏移”:6, “位置”:0 } ] }

您使用的是使用文本分析器的,这与使用搜索不同

文本分析器是在构建真正位于搜索引擎底部的索引时支持搜索引擎的工具。为了构造一个搜索索引,需要分析其中的文档,这就是分析器的作用。他们能够理解不同的语言,能够解析文本并理解if,即拆分单词、删除停止词、理解句子等。或者正如他们在文档中所说:

对可搜索字段进行分析,最常见的是分词、文本规范化和过滤术语。默认情况下,Azure Search中的可搜索字段使用Apache Lucene标准分析器(Standard Lucene)进行分析,该分析器按照“Unicode文本分段”规则将文本分解为元素。此外,标准分析器将所有字符转换为小写形式

因此,您看到的实际上是完全正确的,法语分析器将您发送的单词分解,并从文本中返回可能的标记。对于第一个文本,它找不到除“femme”之外的任何其他可能的标记(我想法语中没有其他类似“fem”或“femm”的词),但是对于第二个文本,它可以在其中找到“femme”和“femme”

因此,您看到的是文本分析器的自然功能

另一方面,如果您为可搜索字段设置了正确的分析器(例如fr.microsoft),则使用搜索API搜索同一文本时应返回中同时包含“femme”和“femmes”的文档。默认的“标准”分析器不处理同一单词的多元论和其他屈折变化。

为了增加响应,fr.microsoft分析器将屈折变化的单词减少为其基本形式。在你的例子中,单词femmes被简化为单数形式femme。您描述的所有案例都适用:

  • 如果文档中存在屈折形式,则使用单词的基本形式进行搜索

    假设您正在使用Vive和Femmes为文档编制索引。
    搜索引擎将为以下术语编制索引:vif、VIVR、Vive、femme、Femmes。
    如果您使用其中任何一个术语(例如femme)进行搜索,文档将匹配。

  • 如果基本形式在文档中,则使用单词的屈折形式进行搜索

    假设您正在使用teext Femme fatale为文档编制索引。
    搜索引擎将为以下术语编制索引:Femme、fatal、fatale。
    如果您使用术语femmes进行搜索,分析器也将生成其基本表单。您的查询将成为femme或femme。具有任何这些条款的文件都将匹配

  • 如果文档中存在该单词的另一个屈折形式,则使用屈折形式的from进行搜索。

    如果文档中有allez,则术语allez和aller将被编入索引
    如果搜索alle,查询将变为alle或aller。由于两种屈折形式都减少到相同的基本形式,因此文档将匹配
  • 这里的关键学习是分析器处理文档,但也处理查询条件。术语是规范化的,用于说明特定于语言的规则

    我希望这就是原因