我需要FEMMES.COM将基本单词FEMME的单数+复数形式标记化。
“analyzers”:[{“@ odata.type”:“#Microsoft.Azure.Search.CustomAnalyzer”,“name”:“text_language_search_custom_analyzer”,“tokenizer”:“text_language_search_custom_analyzer_ms_tokenizer”,“tokenFilters”:[“lowercase” “,”asciifolding“],”charFilters“:[”html_strip“]}],”tokenizers“:[{”@ odata.type“:”#Microsoft.Azure.Search.MicrosoftLanguageStemmingTokenizer“,”name“:”text_language_search_custom_analyzer_ms_tokenizer“ ,“maxTokenLength”:300,“isSearchTokenizer”:false,“language”:“english”}],“tokenFilters”:[],“charFilters”:[]}
{“analyzer”:“text_language_search_custom_analyzer”,“text”:“FEMMES”}
{“@ odata.context”:“https://one-adscope-search-eu-stage.search.windows.net/ $ metadata#Microsoft.Azure.Search.V2016_09_01.AnalyzeResult”,“tokens”:[{“token”:“femme”,“startOffset”:0 ,“endOffset”:6,“position”:0},{“token”:“femmes”,“startOffset”:0,“endOffset”:6,“position”:0}]}
{“@ odata.context”:“https://one-adscope-search-eu-stage.search.windows.net/ $ metadata#Microsoft.Azure.Search.V2016_09_01.AnalyzeResult”,“tokens”:[{“token”:“femmes”,“startOffset”:0 ,“endOffset”:6,“position”:0},{“token”:“com”,“startOffset”:7,“endOffset”:10,“position”:1}]}
{“@ odata.context”:“https://one-adscope-search-eu-stage.search.windows.net/ $ metadata#Microsoft.Azure.Search.V2016_09_01.AnalyzeResult”,“tokens”:[{“token”:“femme”,“startOffset”:0 ,“endOffset”:6,“position”:0},{“token”:“femmes”,“startOffset”:0,“endOffset”:6,“position”:0},{“token”:“com” ,“startOffset”:7,“endOffset”:10,“position”:1}]}
答案 0 :(得分:1)
我想我经过一些实验后想出了这个。我发现MappingCharFilter可以用来代替。在索引器执行标记化之前。这使得词形还原/词干化能够按照预期在所讨论的条款上发挥作用。我需要对我们的其他用例进行更彻底的集成测试,但我认为这可以解决任何面临同类问题的人的问题。
答案 1 :(得分:0)
我之前的回答不正确。 Azure Search实现实际上在BEFORE令牌过滤器之前应用了语言标记器。这基本上使得WordDelimiterToken过滤器在我的用例中无用。
我最终要做的是在上传到Azure进行索引之前预处理数据。在我的C#代码中,我添加了一些正则表达式逻辑,它将FEMMES2017之类的文本分解为FEMMES 2017,然后再将其发送到Azure。这样,当文本到达Azure时,索引器将自己看到FEMMES并使用语言标记器正确地标记为FEMME和FEMMES。