Добавить стоп-слова в стандартный поисковый анализатор Azure?
Я использую анализатор en.microsoft в моем поисковом индексе Azure. По большей части это работает хорошо, но мне нужно добавить несколько специфичных для домена стоп-слов. Есть ли способ добавить стоп-слова в существующий анализатор? Или реализовать собственный анализатор, который наследует свое поведение от стандартного, и просто переопределить стоп-слова, оставив все остальное как есть?
1 ответ
Решение
Хотя вы не можете наследовать от существующего анализатора, вы можете создать пару пользовательских анализаторов (один для индексации и один для поиска), который функционально эквивалентен en.microsoft
, но с вашим собственным списком стоп-слов. Вот как это будет выглядеть в полезной нагрузке определения индекса API REST:
{
...
"analyzers": [
{
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"name": "my_search_analyzer",
"tokenizer": "my_english_search_tokenizer",
"tokenFilters": [ "my_asciifolding_search", "lowercase", "my_stopword_filter" ]
},
{
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"name": "my_index_analyzer",
"tokenizer": "my_english_index_tokenizer",
"tokenFilters": [ "my_asciifolding_index", "lowercase", "my_stopword_filter" ]
}
],
"tokenizers": [
{
"name": "my_english_search_tokenizer",
"@odata.type": "#Microsoft.Azure.Search.MicrosoftLanguageStemmingTokenizer",
"isSearchTokenizer": true,
"language": "english"
},
{
"name": "my_english_index_tokenizer",
"@odata.type": "#Microsoft.Azure.Search.MicrosoftLanguageStemmingTokenizer",
"isSearchTokenizer": false,
"language": "english"
}
],
"tokenFilters": [
{
"name": "my_asciifolding_search",
"@odata.type": "#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
"preserveOriginal": false
},
{
"name": "my_asciifolding_index",
"@odata.type": "#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
"preserveOriginal": true
},
{
"name": "my_stopword_filter",
"@odata.type": "#Microsoft.Azure.Search.StopwordsTokenFilter",
"stopwords": [ "put", "your", "custom", "stopwords", "here" ]
}
]
}