Как реализовать поиск электронной почты без учета регистра в поиске Azure

Я использую службу поиска Azure в одном из своих проектов, и мне необходимо выполнять поиск по адресам электронной почты без учета регистра. Например. [email protected], [email protected], [email protected] должны возвращать одинаковый результат. Я использую собственный анализатор при создании индекса (uax_url_email) https://docs.microsoft.com/en-in/rest/api/searchservice/custom-analyzers-in-azure-search#AnalyzerTable

Вот часть индекса

            [{
                "name": "Username",
                "type": "Edm.String",
                "searchable": true,
                "filterable": false,
                "sortable": false,
                "facetable": false,
                "analyzer": "email_analyzer"
            },              

        ],
        "analyzers": [
            {
                "name": "email_analyzer",
                "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
                "tokenizer": "uax_url_email",
                "tokenFilters": ["lowercase"]
            }]

Но поиск по [email protected] не работает. Может ли кто-нибудь помочь?


person Gaurav Madaan    schedule 06.06.2018    source источник


Ответы (2)


Я создал индекс с помощью того же настраиваемого анализатора и получил ожидаемые результаты без учета регистра. Я использовал простой запрос - [email protected]

Можете ли вы поделиться точным используемым запросом?

Вы также можете проверить, правильно ли анализируется и индексируется поле. Для этой цели можно использовать Analyze API.

person Ishan Srivastava    schedule 10.06.2018
comment
да, Ишан, я могу это сделать, но с простым типом запроса я не могу выполнить поиск содержит. например [email protected] в этом случае. - person Gaurav Madaan; 11.06.2018
comment
Поскольку вы используете токенизатор uax_url_email, электронная почта индексируется по одному токену. Вы не можете выполнить содержащий запрос, используя простой синтаксис запроса. Вам придется использовать запросы regexp, которые поддерживаются через синтаксис запросов lucene. Это должно работать в вашем конкретном случае. search=/.*[email protected]/&queryType=full Взгляните на docs.microsoft.com/en-us/azure/search/. - person Ishan Srivastava; 11.06.2018

Итак, вот обходной путь, который я сделал. В моей базе данных были электронные письма, содержащие заглавные буквы, такие как «[email protected]». У меня было требование иметь возможность выполнять поиск по содержанию, а также полный поиск, что означает: [email protected], [email protected], [email protected] все должны вернуть результат. Итак, я сделал следующее:

  1. Создал представление и изменил адрес электронной почты на Выберите НИЖНИЙ (электронная почта) в качестве электронной почты.
  2. Итак, мой индекс поиска Azure содержит все электронные письма в нижнем регистре.
  3. Затем я использую /../&queryType=full для поиска по электронной почте. Пример: /. [email protected]. / & queryType = full.
person Gaurav Madaan    schedule 13.06.2018