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

时间:2016-10-15 07:15:45

标签: azure azure-search

我想知道*如何在天蓝色搜索服务中工作。目前,我为我的数据创建了索引,并通过在" search"中提供以下数据进行查询。在json的领域。

  1. "搜索":" ATM" (简单文字)
  2. "搜索":" ATM *" (带外卡)
  3. "搜索":" ATM \ *"(转义*以匹配元素*但它不起作用)
  4. 但在所有情况下,我都得到相同的结果。我想知道在Azure搜索中如何解释*(或任何其他特殊字符)。

    如果所有这些都给出相同的结果,我应该使用哪一个来获得最佳性能?

    由于

    添加更多详情:

    我有以下条目: ATM,ATM 1,ATM 2,ATM *

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

1 个答案:

答案 0 :(得分:1)

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

在编制索引时,文档会进行词法分析。文档中的文本被标记为术语,并且诸如删除符号和标点符号以及词干化/词形还原化之类的附加处理被完成。假设您使用的是默认的标准分析器,您将从doc内容中获得以下标记:

DOC1。 ATM => atm

DOC2。 ATM 1 => atm,1

doc3的。 ATM 2 => atm,2

doc5。 ATM * => atm(默认丢弃的标点和符号)

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

在查询时,搜索查询也会经历相同的分析过程。标准分析器对(低级)术语进行标准化并丢弃标点符号。因此,两个搜索查询" ATM"和#34; ATM *"被分析为atm并返回相同的结果。通配符搜索查询" ATM *"经历一个略有不同的道路。通配符前缀查询扩展为以前缀开头的反向索引中的术语。所以,如果你有ATM1'和' ATM2' (文件中没有空格),野外搜索查询' ATM *'也会匹配那些。

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

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

Nate