4

I'm very new to Elasticsearch and am currently trying to get my head around analyzers with respect to the completion suggester

I have a list of places like so:

  • London
  • The London Eye
  • The London Dungeon
  • etc...

By setting the mapping for a completion suggester to the following:

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

I am now able to get all three of the above suggestions returned when the suggesters text input is simply the letter L

However I would like The London Eye to be returned when the user types the word eye and likewise to have The London Dungeon returned when the user types Dungeon (And of course for any prefixes of those terms)

I have been playing with the different analyzers and settings for the better part of today with no success.

What kind of analyzer do I need to use to achieve the above?

Saeed Zhiany
  • 2,051
  • 9
  • 30
  • 41
Gordo
  • 779
  • 9
  • 21
  • You can try this. http://stackoverflow.com/questions/24767375/how-to-suggest-autocomplete-next-word-in-elastic-search/24773439#24773439 – Siddardha Budige Jul 23 '14 at 05:58

1 Answers1

3

You can achieve what you want with the Completion Suggester. Use multiple input fields and a single unified output. If there is a match on one of the input fields the output field will be returned.

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"
    }
}'
Dan Tuffery
  • 5,874
  • 29
  • 28
  • 3
    I don't think this should be an accepted answer. What if someone try to search by "London" ? I believe adding "London" to input will give the output but that needs to be in input. And Siddhardha is already using completion suggester. Can you justify the answer by suggesting proper Analyzer? Otherwise I don't think this answer is correct. Thanks – Jimmy Jan 17 '18 at 13:20