2016-04-11 29 views
0

我在Azure搜索服务中创建了一个索引,其中有几个字符串字段使用捷克 - Lucene分析器标记为可搜索。在捷克语中,我们使用一些重音字符,并且人们在输入时用非重音替换重音字符是很常见的。因此,例如“Václav”(名称)与“Vaclav”具有相同的含义。在我的索引中,我只有几个文件带有“Václav”字样,而没有带有“Vaclav”字样的文件。Azure搜索 - 用捷克语进行基本搜索

尽管我期望Azure Search能够在搜索“Vaclav”时返回包含单词“Václav”的所有文档,但事实并非如此。我想知道是否必须在发送到搜索引擎之前以某种方式解析查询。

我通过Azure门户(设置API版本到2015-02-28-Preview)运行我的测试,并通过我的代码使用最新的SDK Microsoft.Azure.Search 1.1.1。

回答

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" 
    } 
    ] 
} 

我们意识到现在的体验并非最佳。我们正在努力使这样的定制更容易。

让我知道这是否回答你的问题