У подсказчика в Поиске Azure есть только 1 SearchMode, то есть он будет соответствовать любому слову в поле. Хотя это может быть подходящим для многих приложений, это также не подходит для многих других. Есть ли способ настроить суггестера так, чтобы совпадение происходило только тогда, когда совпадением является начало поля? Большое спасибо за вашу помощь.
Предлагающий поиск в Azure
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
Большое спасибо. Интересное решение, но я полагаю, что это существенно раздувает индекс. Мы думали вместо этого использовать Documents.Search (в отличие от предложения) и использовать собственный анализатор, как вы продемонстрировали в другом сообщении, с использованием токенизатора ключевых слов. Есть ли разница в производительности между Documents.Search и Documents.Suggest? Будет ли это решение быстрее, чем мы думаем об использовании токенизатора ключевых слов и запросов postwildcard, таких как q *. Спасибо за вашу помощь.
- person user2981411; 18.12.2015
Вы можете себе представить, что для создания API предложений мы должны проделывать аналогичные трюки на бэкэнде. Предложение и поиск отличаются только потому, что ваши документы и запросы обрабатываются по-разному с точки зрения лексического анализа, кроме того, нет никакой разницы в производительности. Как правило, подход с EdgeNGramTokenFilter будет намного быстрее, чем запросы с подстановочными знаками, потому что мы будем искать точный термин запроса - ›соответствие индексированного термина, а не сканирование инвертированного индекса на предмет терминов, которые частично соответствуют термину запроса с подстановочным знаком. Отвечает ли это на ваш вопрос?
- person Yahnoosh; 18.12.2015
@Yahnoosh можешь взглянуть на это? stackoverflow .com / questions / 57684546 / спасибо
- person pedrommuller; 28.08.2019
В настоящее время в предложениях поддерживается только инфиксное сопоставление.
person
Bruce Johnston
schedule
16.12.2015