星号 (*) 在 Azure 搜索服务中的行为

Behavior of Asterisk(*) in Azure Search Service

我想知道 * 在 Azure 搜索服务中的工作原理。目前,我为我的数据创建了索引,并通过在 json 的 "search" 字段中提供以下数据进行查询。

  1. "search": "ATM"(简单文本)
  2. "search":"ATM*"(带通配符)
  3. "search":"ATM\*"(转义 * 以匹配带有 * 的元素,但它不起作用)

但在所有情况下,我得到的结果都是一样的。我想知道在 Azure 搜索中如何解释 *(或任何其他特殊字符)。

如果它们都给出相同的结果,我应该使用哪个来获得最佳性能?

谢谢

添加更多详细信息:

我有以下条目: 自动取款机、自动取款机 1、自动取款机 2、自动取款机*

在所有 3 个案例中,我得到了这 4 个结果。在第一种情况下,它应该 return 只有一个结果(ATM);在第二种情况下,所有结果;在第三种情况下,ATM*。

在这种情况下,预计所有三个搜索查询 return 的结果相同。

在编制索引时,文档会经过词法分析。文档中的文本被标记化为术语和附加处理,例如删除符号和标点符号,并完成 stemming/lemmatization。假设您使用的是默认的标准分析器,您将从文档内容中获得以下标记:

文档 1。自动取款机 => 自动取款机

文档 2。 ATM 1 => atm, 1

文档 3。自动取款机 2 => 自动取款机,2

文档5。 ATM* => atm(默认情况下丢弃标点符号)

术语标记存储在倒排索引中,用于查找包含术语的文档。

在查询时,搜索查询也会经历相同的分析过程。标准分析器规范化(小写)术语并丢弃标点符号。因此,搜索查询 "ATM" 和 "ATM*" 都被分析为 atm 和 return 相同的结果。通配符搜索查询 "ATM*" 通过稍微不同的路径。通配符前缀查询扩展到倒排索引中以前缀开头的术语。因此,如果文档中有 'ATM1' 和 'ATM2'(无空格),则搜索查询 'ATM*' 也会匹配这些。

由于查询扩展过程,通配符搜索查询 (ATM*) 通常比精确搜索查询(ATM 或 ATM*)慢得多。

此外,如果您需要能够找到带有特殊字符(例如“*”)的术语,请查看 custom analysis in Azure Search。我们为用户提供了不同的方式来定制分析链。

内特