【问题标题】:Azure Search and DashesAzure 搜索和破折号
【发布时间】:2020-05-09 07:54:47
【问题描述】:

我正在使用 Azure 搜索并尝试对文档执行搜索:

好像这样做:/indexes/blah/docs?api-version=2015-02-28&search=abc\-1003

返回与此相同的结果:/indexes/blah/docs?api-version=2015-02-28&search=abc-1003

由于转义的反斜杠,第一个返回的结果是否应该与第二个不同?据我了解,反斜杠应该允许对“abc-1003”的整个字符串进行精确搜索,而不是使用“not”运算符。

(更多信息:https://msdn.microsoft.com/en-us/library/azure/dn798920.aspx)

我可以让它工作的唯一方法是这样做(注意双引号):/indexes/blah/docs?api-version=2015-02-28&search="abc-1003"

我宁愿不这样做,因为这意味着让用户输入引号,而他们不知道该怎么做。

我是否期待一些我不应该期待的东西,或者这可能是 Azure 搜索的一个错误?

【问题讨论】:

  • 也许我是盲人,但是...我看不出您问题中的两个搜索字符串有什么不同。

标签: azure azure-cognitive-search


【解决方案1】:

首先,不以空格开头的破折号的作用类似于破折号,而不是否定运算符。

根据 simple query syntax 的 MSDN 文档

- Only needs to be escaped if it's the first character after whitespace, not if it's in the middle of a term. For example, "wi-fi" is a single term

其次,除非您使用 custom analyzer for your index,否则分析器会将破折号视为几乎像空格一样处理,并将 abc-1003 分成两个标记,abc 和 1003。

然后当你把它放在引号"abc-1003" 中时,它将被视为对短语abc 1003 的搜索,从而返回你所期望的。

如果您想精确匹配 abc-1003,请考虑使用过滤器。它速度更快,并且可以用破折号匹配 guid 或文本等内容

【讨论】:

  • 感谢您提供有关它如何处理破折号的信息。我研究了自定义分析器,似乎它肯定会满足我的需求。感谢您的帮助。
【解决方案2】:

documentation 表示连字符“-”被视为必须转义的特殊字符。
实际上,连字符被视为令牌的拆分,并搜索两侧的单词,如 Sean Saleh pointed out。

经过小调查,我发现您不需要自定义分析器,内置 whitespace 就可以了。
使用方法如下:

{
    "name": "example-index-name",
    "fields": [
        {
            "name": "name",
            "type": "Edm.String",  
            "analyzer": "whitespace",
            ...
        },
    ],
...
}

你使用这个端点来update你的索引:

https://{service-name}.search.windows.net/indexes/{index-name}?api-version=2017-11-11&allowIndexDowntime=true

不要忘记在请求标头中包含api-key。

您还可以通过analyzer test endpoint 测试此分析仪和其他分析仪:

{
  "text": "Text to analyze",
  "analyzer": "whitespace"
}

【讨论】:

    【解决方案3】:

    添加到 Sean 的答案中,带有关键字标记器和小写标记过滤器的自定义分析配置将解决该问题。您似乎正在使用默认的标准分析器,该分析器在索引时的词法分析期间使用特殊字符分解单词。在查询时,此词法分析适用于常规查询,而不是通配符搜索查询。结果,在您的示例中,您在搜索索引中有 and 和通配符搜索查询没有以相同的方式进行标记,并查找以 abc-1003 开头的术语没有找到它,因为两个术语都没有索引以 abc-1003 开头。希望这是有道理的。如果您有任何其他问题,请告诉我。

    内特

    【讨论】:

      猜你喜欢
      • 2020-04-26
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      相关资源
      最近更新 更多