【问题标题】:How to index a field with alphanumeric characters AND a dash for wildcard search如何使用字母数字字符和破折号为通配符搜索索引字段
【发布时间】:2019-03-27 01:51:06
【问题描述】:

给定一个看起来像这样的模型:

{
    [Key]
    public string Id { get; set; }

    [IsSearchable]
    [Analyzer(AnalyzerName.AsString.Keyword)]
    public string AccountId { get; set; }
}

AccountId 的示例数据如下所示:

1-ABC123
1-333444555
1-A4KK498

该字段可以是字母/数字的任意组合,中间有一个破折号。

我需要能够使用 1-ABC* 之类的查询来搜索此字段。但是,除了 Keyword 之外,似乎没有一个基本分析器支持破折号,它不选择任何通配符查询,只是完全匹配。我看过其他一些关于自定义分析器的文章,但我无法获得关于如何构建它来解决这个问题的足够信息。

我需要知道是否必须为该字段构建客户分析器,是否需要不同的搜索分析器和索引分析器?

我将 StandardLucene 用于其他没有破折号的字母数字字段,我还有另一个带有破折号的字段,但它都是数字,并且关键字在那里工作得很好。问题似乎在于字母和数字的混合。

【问题讨论】:

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


    【解决方案1】:

    自定义分析器确实是要走的路。 基本上,您可以定义一个自定义分析器,该分析器使用“关键字”标记器和“小写”标记过滤器。

    将自定义分析器添加到您的 Index 类,并更改模型中的分析器名称以匹配自定义分析器名称:

    new Index()
    {
        ...
        Analyzers = new[]
        {
            new CustomAnalyzer()
            {
                Name = "keyword_lowercase",
                Tokenizer = TokenizerName.Keyword,
                TokenFilters = new[] { TokenFilterName.Lowercase }
            }
        }
    }
    

    型号:

    {
        [Key]
        public string Id { get; set; }
    
        [IsSearchable]
        [Analyzer("keyword_lowercase")]
        public string AccountId { get; set; }
    }
    

    在 REST API 中,这看起来像:

    {
        "fields": [{
            "name": "Id",
            "type": "Edm.String",
            "key": true
        },
        {
            "name": "AccountId",
            "type": "Edm.String",
            "searchable": true,
            "retrievable": true,
            "analyzer": "keyword_lowercase"
         }],
        "analyzers":[
            {
               "name":"keyword_lowercase",
               "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
               "tokenizer":"keyword_v2",
               "tokenFilters":["lowercase"]
            }
         ]
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-26
      • 2020-05-26
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多