如何在Azure搜索中编写“以...结尾”正则表达式

时间:2018-11-27 22:38:50

标签: azure azure-search azure-search-.net-sdk

在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搜索文档here中引用的正则表达式语法。

当我在“ 123-456-78”上test标记程序时,它似乎正在工作,因此我不明白为什么正则表达式搜索无法正常工作。

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

1 个答案:

答案 0 :(得分:0)

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

但是,在不使用自定义标记器的情况下,您可以尝试运行的Lucene正则表达式为:

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

希望有帮助。