我在Azure搜索服务中创建了一个索引,其中有几个字符串字段标记为可使用捷克语 - Lucene分析器进行搜索。在捷克语中,我们使用一些重音字符,人们常常在键入时用非重音字符替换重音字符。因此,例如“Václav”(名称)与“Vaclav”具有相同的含义。在我的索引中,我几乎没有单词“Václav”,也没有单词“Vaclav”。
当我搜索“Vaclav”时,我希望Azure搜索会返回包含单词“Václav”的所有文档,但实际情况并非如此。我想知道在发送到搜索引擎之前是否必须以某种方式解析查询。
我通过Azure Portal运行我的测试(将API版本设置为2015-02-28-Preview)并使用最新的SDK Microsoft.Azure.Search 1.1.1运行我的代码。
答案 0 :(得分:1)
默认情况下,捷克语的Lucene和Microsoft analyzers不会忽略变音符号。实现您想要的最简单方法是使用standardasciifolding.lucene分析器。或者,您可以构建custom analyzer以将ASCII折叠令牌过滤器添加到捷克的标准分析链中。例如:
{
"name":"example",
"fields":[
{
"name":"id",
"type":"Edm.String",
"key":true
},
{
"name":"text",
"type":"Edm.String",
"searchable":true,
"retrievable":true,
"analyzer":"my_czech_analyzer"
}
],
"analyzers":[
{
"name":"my_czech_analyzer",
"@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
"tokenizer":"standard",
"tokenFilters":[
"lowercase",
"czech_stop_filter",
"czech_stemmer",
"asciifolding"
]
}
],
"tokenFilters":[
{
"name":"czech_stop_filter",
"@odata.type":"#Microsoft.Azure.Search.StopTokenFilter",
"stopwords_list":"_czech_"
},
{
"name":"czech_stemmer",
"@odata.type":"#Microsoft.Azure.Search.StemmerTokenFilter",
"language":"czech"
}
]
}
我们意识到现在的体验并不是最佳的。我们正在努力使这样的自定义更容易。
如果这回答了您的问题,请告诉我