首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何索引有字母数字字符的字段和通配符搜索的破折号

如何索引有字母数字字符的字段和通配符搜索的破折号
EN

Stack Overflow用户
提问于 2019-03-25 21:40:02
回答 1查看 314关注 0票数 1

给出了如下模型:

代码语言:javascript
复制
{
    [Key]
    public string Id { get; set; }

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

AccountId的示例数据如下所示:

代码语言:javascript
复制
1-ABC123
1-333444555
1-A4KK498

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

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

我需要知道我是否必须为这个领域构建一个客户分析器,我是否需要一个不同的搜索分析器和索引分析器?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-26 17:51:06

自定义分析器确实是这里的方法。基本上,您可以定义一个自定义分析器,它使用带有“小写”令牌过滤器的“关键字”标记器。

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

代码语言:javascript
复制
new Index()
{
    ...
    Analyzers = new[]
    {
        new CustomAnalyzer()
        {
            Name = "keyword_lowercase",
            Tokenizer = TokenizerName.Keyword,
            TokenFilters = new[] { TokenFilterName.Lowercase }
        }
    }
}

型号:

代码语言:javascript
复制
{
    [Key]
    public string Id { get; set; }

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

在REST中,这看起来类似于:

代码语言:javascript
复制
{
    "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"]
        }
     ]
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55346822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档