在 Azure 搜索中,在具有“12-10-3”或“30-843-44”等值的字段上,我设置了一个自定义标记器以用空字符串替换破折号。
我现在想做一个“以”结尾的正则表达式搜索,但不能让它完全满足我的要求。
例如,要查找以 3 结尾的代码,我尝试过:
searchMode=any&queryType=full&search=code:/(.*)3/
例如,这会返回“12-10-3”,但也会返回“30-843-44”之类的。
然后我尝试了:
searchMode=any&queryType=full&search=code:/(.*)3[^<0-9>]*/
但这似乎给出了相同的结果。我一直在尝试通过 Azure 搜索文档中引用的正则表达式语法。
当我在“123-456-78”上测试我的标记器时,它似乎正在工作,所以我不明白为什么正则表达式搜索不能正常工作。
"tokens": [
{
"token": "12345678",
"startOffset": 0,
"endOffset": 10,
"position": 0
}
]
有任何想法吗?
更新:
分词器在 C# 中的应用如下:
var myIndexDefinition = new Index()
{
Name = "MyIndex",
Analyzers = new[]
{
new CustomAnalyzer
{
Name = "code_with_dash_analyzer",
Tokenizer = TokenizerName.Keyword,
CharFilters = new CharFilterName [] { "dash_to_empty_mapper" }
}
},
CharFilters = new List<CharFilter>
{
new MappingCharFilter("dash_to_empty_mapper", new[] { "- => " })
},
Fields = new[]
{
// Field with the dash in the values
new Field("codes", DataType.String) { IsRetrievable = true, IsSearchable = true, IsSortable = true, IsFilterable = true, IsFacetable = true },
//.... other field definitions....
}
}