带有转义特殊字符的 Azure 搜索自动完成
Azure Search Autocomplete with Escape Special Characters
我在自动完成响应中包含特殊字符(例如 -、@、# 和其他字符)时遇到问题。
我正在使用带有 C# 的 .Net Core 和 Microsoft.Azure.Search 包。
我是 Azure 搜索的新手,所以请慷慨地为我提供详细的解释和一些指导。
到目前为止,我已经创建了一个索引,其中包含如下所示的建议者字段。
private async Task StartIndexAsync(bool resetIndexer = true)
{
await CreateIndexAsync(new[]{
new Field(nameof(ProjectSearchModel.Id), DataType.String) { IsKey = true, IsSearchable = false, IsFilterable = false, IsSortable = false, IsFacetable = false, IsRetrievable = true},
new Field(nameof(ProjectSearchModel.Name), DataType.String) { IsKey = false, IsSearchable = false, IsFilterable = false, IsSortable = false, IsFacetable = false, IsRetrievable = true},
new Field(nameof(ProjectSearchModel.Number), DataType.String) { IsKey = false, IsSearchable = false, IsFilterable = false, IsSortable = false, IsFacetable = false, IsRetrievable = true}
},
new[] {
nameof(ProjectSearchModel.Name),
nameof(ProjectSearchModel.Number),
});
await CreateDatasourceAsync();
await StartIndexerAsync(resetIndexer);
}
internal async Task CreateIndexAsync(string indexName, IList<Field> mapFields, IList<string> sugFields)
{
// Create the Azure Search index based on the included schema
try
{
var definition = new Index()
{
Name = indexName,
Fields = mapFields,
Suggesters = new List<Suggester>() {new Suggester()
{
Name = "sg",
SourceFields = sugFields,
}}
};
await _searchClient.Indexes.CreateOrUpdateAsync(definition);
}
catch (Exception ex)
{
_logger.LogError("Error creating index: {0}\r\n", ex.Message);
}
}
有了这个索引设置,我用下面的函数调用自动完成。
public override async Task<AutocompleteResult> AutocompleteAsync(int take, string text)
{
// Setup the suggest parameters.
var parameters = new AutocompleteParameters()
{
SearchFields = new [] { "Name", "Number"},
AutocompleteMode = AutocompleteMode.TwoTerms,
UseFuzzyMatching = true,
Top = take
};
var completeResult = await base.AutocompleteAsync(parameters, text);
return completeResult;
}
当我在文本中传递 pyh 时,对于名称字段,我的预期结果是 pyh2982@gmail.com。然而,实际结果只是pyh2982 gmail.com,中间缺少@。
我对 Analyzer 进行了一些研究,但我对应该选择哪种分析器感到困惑。
感谢任何帮助!!谢谢!
Analyzer 是一段代码,负责对您的内容进行标记和索引。标准分析器将文本转换为小写,并在每个停用词处中断。据我所知,它应该将您的电子邮件作为一个整体进行索引。您可以在没有“@”符号和“-”的情况下进行测试并执行自动完成。例如:pyh2982 gmail com 并检查它是否适合您。
PS:如果您使用的是 Lucene 模式(queryType=full),那么您应该转义特殊字符。请检查:https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax
我在自动完成响应中包含特殊字符(例如 -、@、# 和其他字符)时遇到问题。
我正在使用带有 C# 的 .Net Core 和 Microsoft.Azure.Search 包。
我是 Azure 搜索的新手,所以请慷慨地为我提供详细的解释和一些指导。
到目前为止,我已经创建了一个索引,其中包含如下所示的建议者字段。
private async Task StartIndexAsync(bool resetIndexer = true)
{
await CreateIndexAsync(new[]{
new Field(nameof(ProjectSearchModel.Id), DataType.String) { IsKey = true, IsSearchable = false, IsFilterable = false, IsSortable = false, IsFacetable = false, IsRetrievable = true},
new Field(nameof(ProjectSearchModel.Name), DataType.String) { IsKey = false, IsSearchable = false, IsFilterable = false, IsSortable = false, IsFacetable = false, IsRetrievable = true},
new Field(nameof(ProjectSearchModel.Number), DataType.String) { IsKey = false, IsSearchable = false, IsFilterable = false, IsSortable = false, IsFacetable = false, IsRetrievable = true}
},
new[] {
nameof(ProjectSearchModel.Name),
nameof(ProjectSearchModel.Number),
});
await CreateDatasourceAsync();
await StartIndexerAsync(resetIndexer);
}
internal async Task CreateIndexAsync(string indexName, IList<Field> mapFields, IList<string> sugFields)
{
// Create the Azure Search index based on the included schema
try
{
var definition = new Index()
{
Name = indexName,
Fields = mapFields,
Suggesters = new List<Suggester>() {new Suggester()
{
Name = "sg",
SourceFields = sugFields,
}}
};
await _searchClient.Indexes.CreateOrUpdateAsync(definition);
}
catch (Exception ex)
{
_logger.LogError("Error creating index: {0}\r\n", ex.Message);
}
}
有了这个索引设置,我用下面的函数调用自动完成。
public override async Task<AutocompleteResult> AutocompleteAsync(int take, string text)
{
// Setup the suggest parameters.
var parameters = new AutocompleteParameters()
{
SearchFields = new [] { "Name", "Number"},
AutocompleteMode = AutocompleteMode.TwoTerms,
UseFuzzyMatching = true,
Top = take
};
var completeResult = await base.AutocompleteAsync(parameters, text);
return completeResult;
}
当我在文本中传递 pyh 时,对于名称字段,我的预期结果是 pyh2982@gmail.com。然而,实际结果只是pyh2982 gmail.com,中间缺少@。
我对 Analyzer 进行了一些研究,但我对应该选择哪种分析器感到困惑。
感谢任何帮助!!谢谢!
Analyzer 是一段代码,负责对您的内容进行标记和索引。标准分析器将文本转换为小写,并在每个停用词处中断。据我所知,它应该将您的电子邮件作为一个整体进行索引。您可以在没有“@”符号和“-”的情况下进行测试并执行自动完成。例如:pyh2982 gmail com 并检查它是否适合您。
PS:如果您使用的是 Lucene 模式(queryType=full),那么您应该转义特殊字符。请检查:https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax