Gordo
Gordo

Reputation: 789

What Elasticsearch Analyzer to use for this completion suggester?

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:

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?

Upvotes: 4

Views: 2529

Answers (1)

Dan Tuffery
Dan Tuffery

Reputation: 5924

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"
    }
}'

Upvotes: 3

Related Questions