首页 > 解决方案 > 如何在 Azure 搜索中编写“以”结尾的正则表达式

问题描述

在 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....
    }
}

标签: azureazure-cognitive-searchazure-search-.net-sdk

解决方案


根据您的描述,仅根据我的经验,我猜您的问题可能是由您的自定义标记器引起的,我不知道如何实施。

但是,如果不使用自定义标记器,您可以尝试的 lucene 正则表达式应该可以工作:

/([0-9]+\-?)+[0-9]*3/

希望能帮助到你。


推荐阅读