使用 NEST 创建自定义令牌过滤器

Posted

技术标签:

【中文标题】使用 NEST 创建自定义令牌过滤器【英文标题】:Create custom token filter with NEST 【发布时间】:2013-11-19 15:13:30 【问题描述】:

如何使用带有此类 JSON 的 NEST 配置索引:

"settings":
  "analysis":
     "filter":
        "name_ngrams":
           "side":"front",
           "max_gram":50,
           "min_gram":2,
           "type":"edgeNGram"
        
     ,
     "analyzer":            
        "partial_name":
           "filter":[
              "standard",
              "lowercase",
              "asciifolding",
              "name_ngrams"
           ],
           "type":"custom",
           "tokenizer":"standard"
        
     
  

我可以使用CustomAnalyzer 类创建我的自定义分析器,但我找不到如何创建自定义过滤器并将其注册到我的分析器中。

提前致谢!

【问题讨论】:

【参考方案1】:

经过一番搜索,我找到了解决方案:

var partialName = new CustomAnalyzer
            
                Filter = new List<string> "lowercase", "name_ngrams", "standard", "asciifolding",
                Tokenizer = "standard"
            ;

var fullName = new CustomAnalyzer
            
                Filter = new List<string> "standard", "lowercase", "asciifolding",
                Tokenizer = "standard"
            ;

client.CreateIndex("indexname", c => c
                .Analysis(descriptor => descriptor
                    .TokenFilters(bases => bases.Add("name_ngrams", new EdgeNGramTokenFilter
                    
                        MaxGram = 20,
                        MinGram = 2,
                        Side = "front"
                    ))
                    .Analyzers(bases => bases
                        .Add("partial_name", partialName)
                        .Add("full_name", fullName))
                )
                .AddMapping<Company>(m => m
                    .Properties(o => o
                        .String(i => i
                            .Name(x => x.Name)
                            .IndexAnalyzer("partial_name")
                            .SearchAnalyzer("full_name")
                        ))));

【讨论】:

索引分析器和搜索分析器有什么区别?为什么需要单独申请? 我使用这篇文章来了解它是如何工作的 - web.archive.org/web/20121021233420/http://…。它不再可以从原始网址获得,但希望它可以从 web.archive.org 访问 对于使用 NEST v5.3 查看此解决方案的任何人......您需要 bases.UserDefined 而不是 bases.Add

以上是关于使用 NEST 创建自定义令牌过滤器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 elasticsearch nest api 创建自定义分析器以忽略重音和 pt-br 停用词?

springcloud-Finchley学习笔记-gateway网关自定义过滤器

使用 JWT 创建 Firebase 自定义身份验证令牌

MongoDB 和 Nest.js:为集合定义自定义名称

该请求不包含在自定义过滤器中。春季安全

(自定义)RestAuthenticationProcessingFilter 排序异常