У меня проблемы с включением специальных символов, таких как -, @, # и других, в ответ на автозаполнение.
Я использую .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;
}
Мой ожидаемый результат будет pyh2982@gmail.com для поля Имя, когда я передам pyh в тексте. Тем не менее, фактический результат - просто pyh2982 gmail.com, с отсутствующим @ inbetween.
Я немного исследовал работу с Analyzer, но меня смущает вопрос о том, какой анализатор мне следует выбрать.
Любая помощь приветствуется! Спасибо!