弹性暗示者中的变形虫

时间:2016-02-13 11:04:59

标签: elasticsearch search-suggestion misspelling

我目前正在尝试建立类似于谷歌拼写错误更正的建议。我使用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",
            }

1 个答案:

答案 0 :(得分:1)

您在查询结果中获得的数据,即

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

是该字段的存储内容。这正是您的源数据。然而,搜索并且显然也是建议者在倒置索引上工作,其包含由分析器按摩的令牌。您最有可能使用折叠变音符号的分析器。

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