Как получить совпадения символов в поисковом индексе Azure вместо подстрок - PullRequest
1 голос
/ 24 мая 2019

Я создал индекс Azure для своей коллекции DocumentDB, и, похоже, он работает нормально. Индекс имеет свойства для учетной записи пользователя, такие как FirstName, LastName и Username. Проблема в том, что токенайзер по умолчанию, кажется, токенизирует поле Username. Хотя я хочу совпадения токенов для первых двух полей, я бы хотел совпадения символов для имен пользователей. Есть ли простой способ добиться этого через портал Azure? Если нет, то как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Добавление другого ответа на основе ваших комментариев выше. Таким образом, в лучшем случае, что вы хотите сделать, это префикс, суффикс и подстановочный поиск. Таким образом, если имя пользователя было user246392, вы можете найти его, набрав «use», «392» или даже «er246». Префикс прост, потому что вы можете искать использовать *, и он найдет его.

Кендра Литтл написал очень хороший пост в блоге о том, как использовать RegEx с помощью поиска Azure , который может позволить вам выполнить полный подстановочный знак вашего запроса (т. Е. Выполнить поиск "392").

Если вы хотите выполнить поиск по суффиксу, вы можете сделать довольно эффективный трюк, если создадите новое поле, которое будет представлять собой пользовательский анализатор, который будет индексировать слова в обратном порядке. Вот пример схемы индекса, которая позволила бы это (над полем СуффиксName)

{   
"name":"people",
"fields": [
    { "name":"id", "type":"Edm.String", "key":true, "searchable":false },
    {"name": "suffixName", "type": "Edm.String", "searchable":true, "indexAnalyzer":"suffixIndexingAnalyzer", "searchAnalyzer":"reverseText"}
],
"analyzers": [
    {
        "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
        "name": "suffixIndexingAnalyzer",  
        "tokenizer": "keyword_v2",
        "tokenFilters": [
            "asciifolding",
            "lowercase",
            "reverse",
            "my_edgeNGramForSuffix"
        ],
        "charFilters": []
    },
    {
        "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
        "name": "reverseText",  
        "tokenizer": "classic",
        "tokenFilters": [
            "lowercase",
            "reverse"
        ],
        "charFilters": []
    }

],
"tokenFilters":[  
    {
        "@odata.type": "#Microsoft.Azure.Search.EdgeNGramTokenFilterV2",
        "name": "my_edgeNGramForSuffix",
        "minGram": 2,
        "maxGram": 25,
        "side": "front"
    }
]

}

0 голосов
/ 24 мая 2019

Можете ли вы дать нам пример того, что вы хотели бы сделать над этим полем имени пользователя?Я не уверен, что вы подразумеваете под сопоставлением символов.Это совпадение символов на основе RegEx?Если это так, возможно, для этого поля может помочь пользовательский анализатор , который включил поиск RegEx?Обратите внимание, что RegEx не так эффективен, как обычное индексирование, поскольку нам нужно сканировать весь контент, а не переходить к инвертированному индексу для поиска совпадений токенов.

...