Elastic Suggesters 中的元音变音

Umlaut in Elastic Suggesters

我目前正在尝试设置一个类似于 google 拼写错误更正的建议器。我将 Elastic Suggesters 与以下查询一起使用:

{
   "query": {
      "match": {
         "name": "iphone hüle"
      }
   },
   "suggest": {
      "suggest_name": {
         "text": "iphone hüle",
         "term": {
            "field": "name"
         }
      }
   }
}

它产生以下建议:

"suggest": {
      "suggest_name": [
         {
            "text": "iphone",
            "offset": 0,
            "length": 6,
            "options": []
         },
         {
            "text": "hule",
            "offset": 7,
            "length": 4,
            "options": [
               {
                  "text": "hulle",
                  "score": 0.75,
                  "freq": 162
               },
               ...
               {
                  "text": "hulk",
                  "score": 0.75,
                  "freq": 38
               }
            ]
         }
      ]
   }

现在我遇到的问题是在选项内和建议内的返回文本中。我提交的文本和返回的文本应该是 "hüle" 而不是 "hule"。此外,返回的选项文本实际上应该是 "hülle" 而不是 "hulle"。当我对查询和建议者使用相同的字段时,我想知道为什么变音符号只在建议者中丢失,而在常规查询结果中却没有。

在这里查看查询结果:

            "_source": {
               ...
               "name": "Ladegerät für iPhone",
               "manufacturer": "Apple",
            }

您在查询结果中返回的数据,即

"name": "Ladegerät für iPhone"

是该字段存储的内容。这正是您的源数据。然而,搜索和建议者显然也在倒排索引上工作,其中包含由分析器按摩的标记。您很可能正在使用折叠变音符号的分析器。

很奇怪我昨天和一位同事讨论过这个问题。我们得出的结论是,我们可能需要一个单独的字段,索引但不存储,我们将非规范化标记索引到其中。我们想用它来获取建议词。此外,它可能是一个我们可以对其进行精确搜索的功能,即确实在 Müller 和 Mueller、Foto 和 Photo、Rene 和 René 之间产生差异的搜索。