Поиск Azure Поиск по не полному слову со специальными символами не работает - PullRequest
0 голосов
/ 18 октября 2019

Я хочу найти строку, содержащую специальные символы, с помощью Azure Search .NET SDK.

Я пытался экранировать каждый специальный символ, пытался использовать full query syntax и пытался использовать подстановочные знаки, ничего не получалось, как ожидалось.

Вот метод:

public virtual async Task<SearchResultDto<T>> Search(string query, SearchOptionsInput searchOptionsInput)
{
   if (!_azureOptions.IsEnabled)
   {
      return null;
   }

   var searchIndexClient = GetSearchIndexClientForGivenType();
   var searchParameters = _objectMapper.Map<SearchParameters>(searchOptionsInput);

   searchParameters.QueryType = QueryType.Full;

   var searchResult = await searchIndexClient.Documents.SearchAsync<T>(query, searchParameters);

   return new SearchResultDto<T>
        {
                Count = searchResult.Count,
                Results = searchResult.Results.Select(r => r.Document).ToList(),
                FacetResults = searchResult.Facets,
        };
}

У меня есть документ с полем Name, установленным на $@!Q$@!. Когда я пишу это в запросе и избегаю восклицательного знака (например, $@\!Q$@\!), я получаю правильный результат. Но когда я удаляю последний ! и пишу подстановочный знак * вместо этого, я не получаю никаких результатов. Без знака нет результата, а также.

Есть ли способ правильно написать специальные символы, чтобы поиск возвращал результаты по совпадению, например. когда я пишу $@\!*?

1 Ответ

1 голос
/ 21 октября 2019

Пока что нет встроенного метода, доступного для экранирования специального символа. Но специальные символы должны быть экранированы для использования в качестве части текста поиска. Вы можете избежать их, поставив перед ними обратную косую черту (). К специальным символам, которые необходимо экранировать, относятся следующие:

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /

Например, чтобы экранировать символ подстановки, используйте **\***.

. Для получения дополнительной информации, пожалуйста, проверьте ссылку ниже:

https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax#escaping-special-characters

Пожалуйста, подтвердите голосовой запрос пользователя для реализации этой функции в приведенной ниже ссылке, это поможет нам установить приоритетность запроса.

https://feedback.azure.com/forums/263029-azure-search/suggestions/32114773-provide-method-for-escaping-characters-in-the-sear

Надеюсь, это поможет.

...