Предлагающий поиск в Azure

У подсказчика в Поиске Azure есть только 1 SearchMode, то есть он будет соответствовать любому слову в поле. Хотя это может быть подходящим для многих приложений, это также не подходит для многих других. Есть ли способ настроить суггестера так, чтобы совпадение происходило только тогда, когда совпадением является начало поля? Большое спасибо за вашу помощь.


person user2981411    schedule 16.12.2015    source источник
comment
Я добавил элемент на наш сайт User Voice по вашему запросу: feedback.azure.com/forums/263029-azure-search/suggestions/ Проголосуйте за него, чтобы помочь нам расставить приоритеты. Спасибо!   -  person Bruce Johnston    schedule 16.12.2015
comment
Следует отметить, что это не только отличная функция - без нее использование Поиска Azure серьезно подрывается во многих приложениях, в том числе и в нашем!   -  person user2981411    schedule 16.12.2015


Ответы (2)


Подумайте о создании настраиваемого анализатора, который во время индексации генерирует префиксы слов из ваших документов:

{
   "name":"names",
   "fields": [
      { "name":"id", "type":"Edm.String", "key":true, "searchable":false },         
      { "name":"partialName", "type":"Edm.String", "searchable":true, "searchAnalyzer":"standard", "indexAnalyzer":"prefixAnalyzer" }
   ],
   "analyzers": [
      {
        "name":"prefixAnalyzer",
        "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
        "tokenizer":"standard",
        "tokenFilters":[ "lowercase", "my_edgeNGram" ]
      }
   ],
   "tokenFilters": [
      {
        "name":"my_edgeNGram",
        "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilter",
        "minGram":2,
        "maxGram":20
      }
   ]
}

Обратите внимание, что в поле partialName используется стандартный анализатор для поиска и пользовательский (prefixAnalyzer) анализатор для индексации. Теперь вы можете отправлять обычные поисковые запросы с префиксом слов в качестве условий запроса.

Вы можете узнать больше о EdgeNGramTokenFilter на нашей странице документации об анализе в Поиске Azure < / а>.

Позвольте мне знать, если это помогает.

person Yahnoosh    schedule 17.12.2015
comment
Большое спасибо. Интересное решение, но я полагаю, что это существенно раздувает индекс. Мы думали вместо этого использовать Documents.Search (в отличие от предложения) и использовать собственный анализатор, как вы продемонстрировали в другом сообщении, с использованием токенизатора ключевых слов. Есть ли разница в производительности между Documents.Search и Documents.Suggest? Будет ли это решение быстрее, чем мы думаем об использовании токенизатора ключевых слов и запросов postwildcard, таких как q *. Спасибо за вашу помощь. - person user2981411; 18.12.2015
comment
Вы можете себе представить, что для создания API предложений мы должны проделывать аналогичные трюки на бэкэнде. Предложение и поиск отличаются только потому, что ваши документы и запросы обрабатываются по-разному с точки зрения лексического анализа, кроме того, нет никакой разницы в производительности. Как правило, подход с EdgeNGramTokenFilter будет намного быстрее, чем запросы с подстановочными знаками, потому что мы будем искать точный термин запроса - ›соответствие индексированного термина, а не сканирование инвертированного индекса на предмет терминов, которые частично соответствуют термину запроса с подстановочным знаком. Отвечает ли это на ваш вопрос? - person Yahnoosh; 18.12.2015

В настоящее время в предложениях поддерживается только инфиксное сопоставление.

person Bruce Johnston    schedule 16.12.2015