0

我目前正在尝试设置一个类似于谷歌拼写错误更正的建议器。我正在使用带有以下查询的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",
            }
4

1 回答 1

1

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

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

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

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

于 2016-02-13T11:48:02.757 回答