【问题标题】:Azure Search SuggesterAzure 搜索建议器
【发布时间】:2015-12-18 07:34:01
【问题描述】:

Azure 搜索中的建议器只有 1 个 SearchMode,即它将匹配字段中的任何单词。尽管这可能适用于许多应用程序,但也不适用于许多其他应用程序。 有什么方法可以配置建议器,以便仅当字段的开头匹配时才发生匹配? 非常感谢您的帮助。

【问题讨论】:

  • 我已在我们的用户语音网站上为您的请求添加了一个项目:feedback.azure.com/forums/263029-azure-search/suggestions/… 请投票以帮助我们确定优先级。谢谢!
  • 应该注意的是,这不仅是一个“很好的功能”——没有它,Azure 搜索的可用性在许多应用程序中都会受到严重破坏——包括我们的应用程序!

标签: azure-cognitive-search


【解决方案1】:

考虑创建一个自定义分析器,在索引时从您的文档中生成单词前缀:

{
   "name":"names",
   "fields": [
      { "name":"id", "type":"Edm.String", "key":true, "searchable":false },         
      { "name":"partialName", "type":"Edm.String", "searchable":true, "searchAnalyzer":"standard", "indexAnalyzer":"prefixAnalyzer" }
   ],
   "analyzers": [
      {
        "name":"prefixAnalyzer",
        "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
        "tokenizer":"standard",
        "tokenFilters":[ "lowercase", "my_edgeNGram" ]
      }
   ],
   "tokenFilters": [
      {
        "name":"my_edgeNGram",
        "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilter",
        "minGram":2,
        "maxGram":20
      }
   ]
}

请注意,partialName 字段使用标准分析器进行搜索,使用自定义 (prefixAnalyzer) 分析器进行索引。您现在可以使用单词前缀作为查询词发出常规搜索请求。

您可以从我们关于 Analysis in Azure Search 的文档页面了解有关 EdgeNGramTokenFilter 的更多信息。

如果这有帮助,请告诉我。

【讨论】:

  • 非常感谢。有趣的解决方案,但我想这会使索引大幅膨胀。我们想改为使用 Documents.Search(而不是 Suggest)并使用自定义分析器,正如您在另一篇文章中使用关键字标记器演示的那样。 Documents.Search 和 Documents.Suggest 之间是否存在性能差异?这个解决方案是否会比我们正在考虑使用关键字标记器并具有像 q* 这样的后通配符查询的解决方案更快。谢谢你的帮助。
  • 您可以想象,为了构建 Suggest API,我们必须在后端执行类似的技巧。 Suggest 和 Search 的不同之处仅在于您的文档和查询在词法分析方面的处理方式不同,此外在性能上没有差异。通常,使用 EdgeNGramTokenFilter 的方法将比通配符查询快得多,因为我们将寻找精确的查询词 -> 索引词匹配,而不是扫描反向索引以查找与通配符的查询词部分匹配的词。这能回答你的问题吗?
  • @Yahnoosh 你能看看这个吗? stackoverflow.com/questions/57684546/… 谢谢
【解决方案2】:

目前建议中仅支持中缀匹配。

【讨论】:

    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多