我为我的 DocumentDB
集合创建了一个 Azure 索引,它似乎工作正常。该索引具有用户帐户的属性,例如 FirstName
、LastName
和 Username
。问题是默认标记器似乎正在标记Username
字段。虽然我想要前两个字段的标记匹配,但我想要用户名的字符匹配。有没有一种简单的方法可以通过 Azure 门户实现此目的?如果没有,我怎样才能实现这一目标?
最佳答案
根据您的上述评论添加另一个答案。所以基本上在最好的情况下,你要做的是前缀、后缀和通配符搜索。因此,如果用户名是 user246392,您可以通过输入“use”、“392”甚至“er246”来找到它。前缀很简单,因为你可以搜索 use* 并且它会找到它。
Kendra Little 写了一篇非常好的博客文章,介绍了如何利用 RegEx with Azure Search ,这可以让您执行询问的完整通配符部分(即搜索“392”)。
如果您想进行后缀搜索,您可以使用一个非常有效的技巧,即创建一个新字段,该字段将是一个自定义分析器,它将以相反的顺序对单词进行索引。以下是允许此操作的索引架构示例(通过 suffixName 字段)
{
"name":"people",
"fields": [
{ "name":"id", "type":"Edm.String", "key":true, "searchable":false },
{"name": "suffixName", "type": "Edm.String", "searchable":true, "indexAnalyzer":"suffixIndexingAnalyzer", "searchAnalyzer":"reverseText"}
],
"analyzers": [
{
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"name": "suffixIndexingAnalyzer",
"tokenizer": "keyword_v2",
"tokenFilters": [
"asciifolding",
"lowercase",
"reverse",
"my_edgeNGramForSuffix"
],
"charFilters": []
},
{
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"name": "reverseText",
"tokenizer": "classic",
"tokenFilters": [
"lowercase",
"reverse"
],
"charFilters": []
}
],
"tokenFilters":[
{
"@odata.type": "#Microsoft.Azure.Search.EdgeNGramTokenFilterV2",
"name": "my_edgeNGramForSuffix",
"minGram": 2,
"maxGram": 25,
"side": "front"
}
]
}
关于azure - 如何在Azure搜索索引中获取字符匹配而不是子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56284248/