【问题标题】:How to use sql like clause in azure search?如何在天蓝色搜索中使用 sql like 子句?
【发布时间】:2016-06-07 02:19:00
【问题描述】:

我正在使用 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

【问题讨论】:

  • 在编辑您的问题时,我注意到您在search=Mc* 之间有一个空格,因此它读作&search =Mc*&... 这将是一个问题。
  • 我尝试了你的建议。但不工作。我尝试了另一个选项 $filter=Name eq 'mcdonal'&queryType=simple&searchMode=all。工作正常但 $filter=Name eq 'mc*'&queryType=simple&searchMode=all.也不工作

标签: azure azure-cognitive-search


【解决方案1】:

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

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

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

现在我们只需要一个新字段,它使用“suffixAnalyzer”作为索引,使用“revereseText”作为 searchAnalyzer(您可以在下面看到字段“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" },
]

【讨论】:

    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2018-03-06
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多