Azure搜索 - 捷克语基本搜索

时间:2016-04-11 14:17:13

标签: azure-search

我在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运行我的代码。

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

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

如果这回答了您的问题,请告诉我