2016-02-13 29 views
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", 
      } 

回答

1

你回到你的查询结果的数据,即

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

是该领域的存储内容。这正是您的源数据。然而,显然也是建议者搜索倒排索引,其中包含由分析器按摩的令牌。你很可能使用折叠变音器的分析仪。

奇怪,我昨天和一位同事讨论过这个问题。我们得出的结论是,我们可能需要一个单独的字段,索引而不存储,我们将索引非标准化的标记。我们想用它来获取建议条款。此外,我们还可以对其进行精确搜索,即搜索能够在Müller和Mueller,Foto和Photo,Ren​​e和René之间做出区别。

+0

谢谢Harald!它帮助了很多! –