4

我对 Elasticsearch 非常陌生,目前正试图让我的头脑围绕分析器来了解completion suggester

我有一个这样的地方列表:

  • 伦敦
  • 伦敦眼
  • 伦敦地牢
  • ETC...

通过将完成建议器的映射设置为以下内容:

'place_suggest': {
     'type': 'completion',
     'payloads': true,
     'index_analyzer' : 'stop',
     'search_analyzer' : 'stop',
     'preserve_position_increments' : false
}

当建议者的文本输入只是字母时,我现在能够返回所有上述三个建议L

但是,我希望The London Eye在用户键入单词时返回,eye并且同样The London Dungeon在用户键入时返回Dungeon(当然对于这些术语的任何前缀)

在今天的大部分时间里,我一直在使用不同的分析器和设置,但没有成功。

我需要使用什么样的分析仪来实现上述目标?

4

1 回答 1

3

您可以使用Completion Suggester实现您想要的。使用多个输入字段和一个统一的输出。如果其中一个输入字段匹配,则将返回输出字段。

curl -X PUT localhost:9200/places/place/1 -d '
{
    "title" :         "The London Eye",
    "place_suggest" : {
        "input" :      [
            "The London Eye",
            "Eye"
        ],
        "output":"The London Eye"
     }
}'

curl -X PUT localhost:9200/places/place/2 -d '
{  
    "title" :         "The London Dungeon",
    "place_suggest" : {
        "input" :      [
            "The London Dungeon",
            "Dungeon"
         ],
         "output":"The London Dungeon"
    }
}'
于 2014-07-23T07:27:10.093 回答