azure - 如何在azure搜索中使用sql like子句?

标签 azure azure-cognitive-search

我正在使用azure搜索,我想使用sql的like子句

我在 azure 中使用的查询是

https://Serivename.search.windows.net/indexes/catalogsearch/docs?
api-version=2015-02-28&search =Mc*&queryType=simple&searchMode=all

但它不起作用

我尝试过的:

How Can i use Azure Search Like Syntax

https://azure.microsoft.com/en-us/blog/lucene-query-language-in-azure-search

最佳答案

关于使用通配符 * 进行 Like% 样式查询的评论中有一些很好的答案,但有时您可能也想进行 %Like 查询。为此,您需要创建一个 custom analyzer

您需要这样做的原因是因为默认索引的工作方式是索引单词的开头。例如,对于 Microsoft 一词,索引将通过 M 完成,然后是 Mi,然后是 Mic,等等...

这使得搜索 Mic% 变得很容易,但它不适用于 %soft。因此,为了使其正常工作,我们需要使用一些技巧,告诉分析器反转单词,然后对这些单词进行索引(您可以在下面查看分析器“suffixAnalyzer”的示例)。以 Microsoft 为例,它会对 t、tf、tfo、tfos 等进行索引...当然,这不会像现在这样工作,因为我们希望能够搜索 %soft,但索引颠倒了单词(即tofs 而不是软)。因此,我们所做的就是拥有一个尊重它的分析器(您可以在下面看到分析器“revereseText”的示例)。

现在我们需要一个新字段,该字段使用“suffixAnalyzer”进行索引,使用“revereseText”进行搜索分析器(您可以在下面查看字段“suffixName”的示例)。

"fields": [
    { "name":"suffixName", "type":"Edm.String", "searchable":true, "searchAnalyzer":"reverseText", "indexAnalyzer":"suffixAnalyzer" }
]

"analyzers": [
    {"name":"suffixAnalyzer","@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer","tokenizer":"standard","tokenFilters":[ "lowercase", "asciifolding", "reverse", "my_edgeNGram" ]},
    {"name":"reverseText","@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer","tokenizer":"standard","tokenFilters":[ "lowercase", "reverse" ]}
]

掌握所有这些后,您可以在 suffixName 字段中搜索“soft”,它会以非常快的查询速度找到它。

顺便说一句,您实际上可以使用以下分析器创建一个前缀分析器,这样您实际上就不必使用通配符。

"analyzers": [
    {"name":"prefixAnalyzer","@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer","tokenizer":"standard","tokenFilters":[ "lowercase", "my_edgeNGram" ]}
]

"fields": [
    { "name":"partialName", "type":"Edm.String", "searchable":true, "searchAnalyzer":"standard", "indexAnalyzer":"prefixAnalyzer" },
]

关于azure - 如何在azure搜索中使用sql like子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37669511/

相关文章:

azure - 我可以使用 Azure App Insights 监视逻辑应用程序应用程序吗?

azure - Windows azure 带宽和 CDN 之间的关系

azure-cognitive-search - 在 azure 搜索中创建数据源返回 403 Forbidden

c# - Azure 搜索 : Indexed document count does not match the total number of uploaded records

azure - Azure 搜索的同义词支持

c# - 需要在启动时按需将文件下载到 Azure Web 角色中

azure - 如果我停止并重新启动 Microsoft Azure 虚拟机,我的文件是否会丢失

c# - 同一线程可以在 Azure Functions 中同时运行多个函数吗?

azure-cognitive-search - 对 blob 存储中的 pdf 文件进行 Azure 认知搜索会返回 pdf 的全部内容,如何从 pdf 文件中仅获取部分的特定 block ?

json - 在 Azure 搜索查询中搜索 '-'