【问题标题】:How do you construct an Azure Search query to return a wildcard search based solely on a specific field?如何构建 Azure 搜索查询以返回仅基于特定字段的通配符搜索?
【发布时间】:2021-11-16 02:23:18
【问题描述】:

如果我可能在 SO 的其他一些领域错过了这个,请重定向我,但我不认为这是一个受骗的问题。

我正在使用带有名为 Title 的索引字段的 Azure 搜索,该索引字段可使用标准 Lucerne 分析器进行搜索和过滤。

使用内置资源管理器时,如果我想返回所有明确命名为 Full Stack Developer 的职位,我可以这样实现:

$filter=Title eq 'Full Stack Developer'&$count=true 

但是,如果我想使用通配符检索所有职位,以这种方式返回名称中包含 Full Stack 的所有记录:

$filter=Title eq 'Full Stack*'&$count=true 

返回的前 20 条左右记录是正确的,但在那之后,我得到了一些与我在查询中指定的标题完全没有共同点的记录。我最初的假设是,Azure 可能包含我指定的标题,也对文本执行包含性关键字搜索。

虽然我发现了一些似乎证明了该假设的实例,但返回的更多记录完全使该假设无效。

也许我不完全了解 Azure 搜索引擎盖下的机制,因此尽管我的查询似乎是有效的;我对结果的期望很遥远。

那么,如果可能的话,我的查询应该如何执行通配符以保证搜索中指定的单词包含在返回的标题中?什么是条件返回以适应 OR 运算符的正确语法是包容性的?

【问题讨论】:

  • 基本上,您只想在 Title 字段上执行通配符搜索。对吗?
  • 是的,只有标题字段

标签: azure lucene azure-cognitive-search


【解决方案1】:

Azure 认知搜索允许您执行仅限于特定字段的通配符搜索。为此,您需要在 searchFields 参数中指定要在其中执行搜索的字段的名称。

在这种情况下,您的搜索 URL 将类似于:

https://accountname.search.windows.net/indexes/indexname/docs?api-version=2020-06-30&searchFields=Title&search=Full Stack*

来自链接here

【讨论】:

  • 谢谢!这让我更接近并大大减少了我所追求的结果,但现在我得到了具有以下名称的头衔:技术招聘人员(全周期)、全职仓库职位和商业油漆工 - 全职。所以还是少了点什么。我怀疑 Azure 尊重查询 b/c 所有这些名称都包含 Full 但缺少 Stack。我本来希望始终返回查询中的前 2 个单词。
  • 您可以尝试将搜索条件放在双引号中吗?请参阅此链接了解更多详情:docs.microsoft.com/en-us/azure/search/…。 HTH。
  • 您可以将“searchMode=all”作为查询参数包含在内,以告知 azure search 确保搜索请求中的每个字词都包含在结果中
  • 双引号没有解决也没有设置 searchMode=all。在这一点上,我比最初的帖子更困惑。
  • 能否分享一些示例数据?
猜你喜欢
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
相关资源
最近更新 更多