我为我的DocumentDB
集合创建了一个Azure索引,它似乎运行良好。索引具有用户帐户的属性,例如FirstName
,LastName
和Username
。问题在于默认标记器似乎正在标记Username
字段。虽然我希望前两个字段的令牌匹配,但我希望用户名的字符匹配。有没有一种简单的方法可以通过Azure门户实现这一目标?如果没有,我该如何实现?
答案 0 :(得分:1)
根据您的上述评论添加另一个答案。因此,基本上在最佳情况下,您想要做的是前缀,后缀和通配符搜索。因此,如果用户名是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"
}
]
}
答案 1 :(得分:0)
您能举例说明您要在此用户名字段中执行的操作吗?我不确定您所说的字符匹配是什么意思。它是基于RegEx的字符匹配吗?如果是这样,也许启用了RegEx搜索的custom analyzer可能有助于此字段?请注意,RegEx的性能不如典型的索引,因为我们需要扫描整个内容,而不是通过反向索引来查找令牌匹配。