带有转义特殊字符的天蓝色搜索自动完成

问题描述 投票:0回答:1

我在自动完成响应中包含特殊字符(例如-,@,#等)时遇到问题。

我正在将.Net Core与C#和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时,对于Name字段,我的预期结果将是[email protected]。但是,实际结果只是pyh2982 gmail.com,缺少@ inbetween。

我对分析器进行了一些研究,但是对于应该选择哪种分析器感到困惑。

任何帮助表示感谢!!谢谢!

azure special-characters msdn azure-search analyzer
1个回答
0
投票

分析器是一段代码,用于标记内容并为您的内容建立索引。标准分析器将文本转换为小写,并在每个停用词上中断。据我所知,它应该将您的电子邮件索引为一件。您可以进行测试并执行不带'@'符号和'-'的自动完成功能。例如:pyh2982 gmail com并检查它是否适合您。

PS:如果您使用的是Lucene模式(queryType = full),则应转义特殊字符。请检查:https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax

© www.soinside.com 2019 - 2024. All rights reserved.