C# 如何在Azure搜索中允许自定义分析器使用通配符

C# 如何在Azure搜索中允许自定义分析器使用通配符,c#,azure,azure-cognitive-search,analyzer,azure-search-.net-sdk,C#,Azure,Azure Cognitive Search,Analyzer,Azure Search .net Sdk,提前谢谢你的帮助 我正在使用Azure Search.Net SDK构建索引器。我目前也在使用自定义分析器 在使用自定义分析器之前,我使用的是EnLucene分析器,它允许我使用通配符搜索*。 例如,我使用允许用户搜索后缀搜索。如果用户搜索“app”,它将返回“apple,application,approach”等结果。请不要建议自动完成或建议,因为suggester不能与自定义分析器一起使用。我不想创造 仅仅因为suggester就增加了20个搜索字段。(一个用于建议者,一个用于搜索) 下面

提前谢谢你的帮助

我正在使用Azure Search.Net SDK构建索引器。我目前也在使用自定义分析器

在使用自定义分析器之前,我使用的是EnLucene分析器,它允许我使用通配符搜索*。 例如,我使用允许用户搜索后缀搜索。如果用户搜索“app”,它将返回“apple,application,approach”等结果。请不要建议自动完成或建议,因为suggester不能与自定义分析器一起使用。我不想创造 仅仅因为suggester就增加了20个搜索字段。(一个用于建议者,一个用于搜索)

下面是我的自定义分析器示例。它不允许我使用*进行部分匹配。我不寻找任何前缀或后缀部分匹配的NGram解决方案。实际上我想使用通配符*。如何允许通配符搜索

var definition = new Index()
{
    Name = indexName,
    Fields = mapFields,
    Analyzers = new[]
    {
        new CustomAnalyzer
        {
            Name = "custom_analyzer",
            Tokenizer = TokenizerName.Whitespace,
            TokenFilters = new[]
            {
                TokenFilterName.AsciiFolding,
                TokenFilterName.Lowercase,
                TokenFilterName.Phonetic
            }
        }
    }
};

以下是如何做到这一点:

  • 添加自定义分析器,如下所示:
{
“姓名”:“姓名”,
“字段”:[
{“name”:“id”,“type”:“Edm.String”,“key”:true,“searchable”:false},
{“name”:“name”,“type”:“Edm.String”,“analyzer”:“my_standard”}
],
“分析仪”:[
{
“名称”:“我的标准”,
“@odata.type”:“#Microsoft.Azure.Search.CustomAnalyzer”,
“标记器”:“标准”,
“标记过滤器”:[“小写”、“ascifolding”]
}
]
}
//下面的代码段用于使用c创建定义#
新CustomAnalyzer
{
Name=“custom_analyzer”,
Tokenizer=TokenizerName.Standard,
TokenFilters=new[]
{
TokenFilterName。小写,
TokenFilterName.AsciiFolding,
标记过滤器名称。语音
}

}
以下是如何做到这一点:

  • 添加自定义分析器,如下所示:
{
“姓名”:“姓名”,
“字段”:[
{“name”:“id”,“type”:“Edm.String”,“key”:true,“searchable”:false},
{“name”:“name”,“type”:“Edm.String”,“analyzer”:“my_standard”}
],
“分析仪”:[
{
“名称”:“我的标准”,
“@odata.type”:“#Microsoft.Azure.Search.CustomAnalyzer”,
“标记器”:“标准”,
“标记过滤器”:[“小写”、“ascifolding”]
}
]
}
//下面的代码段用于使用c创建定义#
新CustomAnalyzer
{
Name=“custom_analyzer”,
Tokenizer=TokenizerName.Standard,
TokenFilters=new[]
{
TokenFilterName。小写,
TokenFilterName.AsciiFolding,
标记过滤器名称。语音
}

}
你好,莫希特。非常感谢你的回答。看起来您正在使用标准标记器。除了标准Lucene analyzer之外,我是否可以在任何其他标记器中使用正则表达式搜索?如果是这样,我应该如何指定允许在标准之外的任何其他标记器中进行正则表达式搜索?Mohit,在单元测试中,您似乎指定了要搜索的完整标记“someone@somewhere.something". 如果改为搜索“some”值,您会返回两条记录吗?在尝试遵循您的示例时,当使用Kyle在原始帖子中提到的自定义分析器时,我不会返回部分匹配。您不能再在自定义分析器中使用星号,因此无法识别部分匹配。在博客中,他们使用edgeNGram方法通过一个单独的字段来解决这个问题。你认为这是解决这场局部比赛挑战的唯一办法吗?嗨,莫希特。非常感谢你的回答。看起来您正在使用标准标记器。除了标准Lucene analyzer之外,我是否可以在任何其他标记器中使用正则表达式搜索?如果是这样,我应该如何指定允许在标准之外的任何其他标记器中进行正则表达式搜索?Mohit,在单元测试中,您似乎指定了要搜索的完整标记“someone@somewhere.something". 如果改为搜索“some”值,您会返回两条记录吗?在尝试遵循您的示例时,当使用Kyle在原始帖子中提到的自定义分析器时,我不会返回部分匹配。您不能再在自定义分析器中使用星号,因此无法识别部分匹配。在博客中,他们使用edgeNGram方法通过一个单独的字段来解决这个问题。你认为这是解决这场局部比赛挑战的唯一办法吗?