如何在 WordDelimiter TokenFilter 上设置自定义参数

How does one set custom parameters on the WordDelimiter TokenFilter

我想通过 C# 中的 .NET SDK 使用 Azure 搜索。如何创建一个使用 WordDelimiter TokenFilter 并将 属性 preserveOriginal 设置为 true 的分析器?

自定义分析器的属性似乎只包括 TokenFilterNames

private static void CmdletIndex(ISearchServiceClient 
serviceClient)
{
  var definition = new Index
  {
    Name = "cmdlets",
    Fields = FieldBuilder.BuildForType<CmdletModel>(),
    Analyzers = new[]
    {
        new CustomAnalyzer
        {
            Name = "my_analyzer",
            Tokenizer = TokenizerName.Standard,
            TokenFilters = new[]
            {
                TokenFilterName.WordDelimiter
            }
        }
    }
  };

  serviceClient.Indexes.Create(definition);
}

如何使用创建 WordDelimiter TokenFilter 并设置自定义属性?

您需要先定义一个基于 WordDelimiter 的标记过滤器,然后在您的自定义分析器中引用它。

我手边没有示例,但根据你问题中的代码,我认为它是这样工作的(免责声明:未测试;不确定它是否可以编译,但希望它能为你提供一般信息想法):

private static void CmdletIndex(ISearchServiceClient 
serviceClient)
{
  var definition = new Index
  {
    Name = "cmdlets",
    Fields = FieldBuilder.BuildForType<CmdletModel>(),
    Analyzers = new[]
    {
        new CustomAnalyzer
        {
            Name = "my_analyzer",
            Tokenizer = TokenizerName.Standard,
            TokenFilters = new[]
            {
                "my_word_delimiter_filter"
            }
        }
    },
    TokenFilters = new[]
    {
        new WordDelimiterTokenFilter()
        {
            Name = "my_word_delimiter_filter",
            PreserveOriginal = true
        }
    }
  };

  serviceClient.Indexes.Create(definition);
}

另外,请注意,用于 Azure 认知搜索的全新 SDK 很快就会全面上市(2020 年 7 月)。它类似于 Microsoft.Azure.Search,但不向后兼容。如果您想对预览进行评估并提供反馈,可以找here.