Поиск Azure - запрос символа амперсанда

Я пытаюсь найти все записи, содержащие символ &, который зарезервирован. Я использую search, а не $filter.

Согласно документации, его нельзя экранировать с помощью \%, и его следует экранировать как часть URL-адреса HTML в %26.

Попытка SDK и Search Explorer найти какие-либо варианты поиска, но безуспешно:

  1. &
  2. *&*
  3. *%26*
  4. %26
  5. \%26

UPD

Пример документа:

{
    "test": "Hello & World"

Поисковый запрос: search=%26&searchFields=test&$select=test

UPD 2

public class MyType
{
    [System.ComponentModel.DataAnnotations.Key]
    [IsFilterable]
    public string Id { get; set; }

    [IsSearchable, IsSortable]
    public string Test { get; set; }
}

class Program
    {
        private static SearchServiceClient CreateSearchServiceClient()
        {
            string searchServiceName = "XXXXXX";
            string adminApiKey = "XXXXXXX";

            var serviceClient = new SearchServiceClient(searchServiceName, new SearchCredentials(adminApiKey));
            return serviceClient;
        }

        static void Main(string[] args)
        {
            var client = CreateSearchServiceClient();
            var def = new Microsoft.Azure.Search.Models.Index
            {
                Name = "temp-test-reserved1",
                Fields = FieldBuilder.BuildForType<MyType>()
            };
            client.Indexes.Create(def);
            var c = client.Indexes.GetClient("temp-test-reserved1");

            var actions = new IndexAction<MyType>[]
            {
                IndexAction.Upload(new MyType{ Id = "1", Test = "Hello & World" }),
                IndexAction.Upload(new MyType{ Id = "2", Test = "& test start" }),
                IndexAction.Upload(new MyType{ Id = "3", Test = "test end &" })
            };
            c.Documents.Index(IndexBatch.New(actions));
        }
    }

search=%26&searchFields=Test&$select=Test


person deeptowncitizen    schedule 21.11.2019    source источник
comment
Вы пробовали все эти возможности как в SDK, так и в Search Explorer? Я отправляю ответ ниже, но для SDK вариант 1 должен был просто работать, если вы не измените значения по умолчанию. Можете ли вы опубликовать пример кода, если это не сработало   -  person Arvind - MSFT    schedule 21.11.2019
comment
Кроме того, на всякий случай - он должен быть экранирован до %26 (как указано в вашем списке), а не %24 (как указано в предложении выше)   -  person Arvind - MSFT    schedule 21.11.2019
comment
Меньше всего я хочу исправить это с помощью Search Explorer. Обновление сообщения   -  person deeptowncitizen    schedule 22.11.2019
comment
Есть ли другие причины, по которым документ может быть отфильтрован? Не могли бы вы попробовать использовать анализатор ключевых слов (вместо анализатора по умолчанию) docs.microsoft.com/en-us/azure/search/ и посмотрите, поможет ли это?   -  person Arvind - MSFT    schedule 25.11.2019
comment
этот подход не помог. на самом деле, я не думаю, что в нашем случае можно использовать все поле в качестве токена. нам нужен полнотекстовый поиск с оценкой по этому полю. также мы используем возможности поиска и фильтрации   -  person deeptowncitizen    schedule 25.11.2019


Ответы (2)


Скорее всего, вы не сможете найти &, потому что он удаляется во время индексации и запроса, поскольку анализатор по умолчанию считает его знак препинания. В этой статье содержится дополнительная информация о лексическом анализе в Когнитивном поиске Azure. Если вам нужно сохранить амперсанды, но при этом разметить текст на границах пробелов, вам нужно создать пользовательский анализатор.

person Bruce Johnston    schedule 25.11.2019

В поле обозревателя поиска на портале Azure попробуйте запрос &search=%26 (как показано ниже).

введите здесь описание изображения

В SDK, только если вы установили _ 2_ для true, вам нужно подумать о кодировке URL-адреса символом '&'. По умолчанию для этого параметра установлено значение false, и в этом случае вам не нужно его кодировать.

Дополнительная документация по экранированию / кодированию здесь

person Arvind - MSFT    schedule 21.11.2019
comment
пример с Search Explorer не работает. Он ничего не возвращает - person deeptowncitizen; 22.11.2019