【问题标题】:Azure Search Index - Search For Exact WordAzure 搜索索引 - 搜索准确词
【发布时间】:2017-06-19 15:13:51
【问题描述】:

我们将 Azure 搜索索引用于我们的一个搜索 API。我们在 Azure 搜索索引中有一个字段说显示名称(这是一个字符串字段。要求来自 API,当我们使用显示名称进行搜索时,搜索应该是对字段的精确搜索。

例如: 如果我们搜索“George Joseph”,搜索索引应该只返回与显示名称“George Joseph”完全匹配的记录,而不应该返回名称为“George Joseph John”或 John George Joseph”的记录

有什么办法可以做到吗?

问候,

约翰

【问题讨论】:

  • 只是大声思考,你能用filter代替search吗?所以你的搜索表达式是$filter=DisplaName%20eq%20'George Joseph'
  • 它会支持显示名称的收集吗?比如 $filter=DisplayName%20eq%20'George Joseph'&DisplayName%20eq%20'George John'
  • 另外,我们需要对作为集合的 Person 的 Educational 资格实施相同的功能。可以有“学士学位”、“硕士学位”等。在这种情况下可以这样做吗?
  • 为什么不呢?这是一个 ODATA 过滤器查询,因此您可以构造类似 $filter=DisplayName%20eq%20'George Joseph'%20or%20DisplayName%20eq%20'George John' 的内容。请参阅此链接了解更多详情:docs.microsoft.com/en-us/rest/api/searchservice/…。唯一要注意的是,您要过滤的字段必须设置 filterable 属性。
  • 另一个问题是 $filter 区分大小写。

标签: azure azure-cognitive-search


【解决方案1】:

假设您对区分大小写的匹配感兴趣,您可以使用过滤器来实现此目的。例如,DisplayName eq 'George Joseph' 将完全匹配 George Joseph,但不会匹配 george JOSEPH。您可以找到有关过滤器语法的详细信息here

【讨论】:

    【解决方案2】:

    您可以指定“&searchMode=All”

    当您设置 searchMode=all 时,您告诉搜索引擎所有查询词必须在文档中至少匹配一次-

    agency temps&$count=true&$top=30&$skip=0&searchMode=All&$filter=(CompanyCode eq '13453' and VNumber eq '00023232312016') &scoringProfile=BusinessProfile1&searchFields=VCategory
    

    https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax

    searchMode=all 参数与此示例相关。每当运算符在查询中时,您通常应设置 searchMode=all 以确保匹配所有条件。

    GET /indexes/hotels/docs?search=category:budget AND "recently renovated"^3&searchMode=all&api-version=2020-06-30&querytype=full

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 2020-04-02
      相关资源
      最近更新 更多