【问题标题】:Behavior of Asterisk(*) in Azure Search ServiceAzure 搜索服务中星号 (*) 的行为
【发布时间】:2016-10-20 01:30:39
【问题描述】:

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

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

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

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

谢谢

添加更多细节:

我有以下条目: 自动柜员机、自动柜员机 1、自动柜员机 2、自动柜员机*

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

【问题讨论】:

  • 你能描述一下你期望的结果和你得到的实际结果吗?

标签: azure azure-cognitive-search


【解决方案1】:

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

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

doc1.自动取款机 => 自动取款机

doc2.自动取款机 1 => 自动取款机,1

doc3.自动取款机 2 => 自动取款机,2

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

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

在查询时,搜索查询也经历相同的分析过程。标准分析器规范化(小写)术语并丢弃标点符号。因此,搜索查询“ATM”和“ATM*”都被分析为 atm 并返回相同的结果。通配符搜索查询“ATM*”的路径略有不同。通配符前缀查询扩展为倒排索引中以前缀开头的词条。因此,如果您在文档中有 'ATM1' 和 'ATM2'(没有空格),那么狂野搜索查询 'ATM*' 也会匹配它们。

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

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

内特

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 2018-02-13
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多