Completion suggest array


(Zaid Amir) #1

I have an issue with ES completion suggester. I have the following index mapping:

curl -XPUT localhost:9200/test_index/ -d'
{
   "mappings": {
      "item": {
         "properties": {
            "test_suggest": {
               "type": "completion",
               "index_analyzer": "whitespace",
               "search_analyzer": "whitespace",
               "payloads": false
            }
         }
      }
   }
}'

I index some names like so:

curl -X PUT 'localhost:9200/test_index/item/1?refresh=true' -d '{
    "suggest" : {
        "input": [ "John", "Smith" ],
        "output": "John Smith",        
        "weight" : 34
    }
}'

curl -X PUT 'localhost:9200/test_index/item/2?refresh=true' -d '{
    "suggest" : {
        "input": [ "John", "Doe" ],
        "output": "John Doe",        
        "weight" : 34
    }
}'

Now if I call suggest and provide only the first name John it works fine:

curl -XPOST localhost:9200/test_index/_suggest -d '
{
    "test_suggest":{
        "text":"john",
        "completion": {
            "field" : "test_suggest"
        }
    }
}'

Same works for last names:

curl -XPOST localhost:9200/test_index/_suggest -d '
    {
        "test_suggest":{
            "text":"doe",
            "completion": {
                "field" : "test_suggest"
            }
        }
    }'

Even searching for parts of last or first names work fine:

curl -XPOST localhost:9200/test_index/_suggest -d '
    {
        "test_suggest":{
            "text":"sm",
            "completion": {
                "field" : "test_suggest"
            }
        }
    }'

However, when I try and search for something that includes part or all of the second word (last name) I get no suggestions, none of the calls below work:

curl -XPOST localhost:9200/test_index/_suggest -d '
    {
        "test_suggest":{
            "text":"john d",
            "completion": {
                "field" : "test_suggest"
            }
        }
    }'


   curl -XPOST localhost:9200/test_index/_suggest -d '
        {
            "test_suggest":{
                "text":"john doe",
                "completion": {
                    "field" : "test_suggest"
                }
            }
        }'



curl -XPOST localhost:9200/test_index/_suggest -d '
        {
            "test_suggest":{
                "text":"john smith",
                "completion": {
                    "field" : "test_suggest"
                }
            }
        }'

I wonder how can I achieve such a thing without having to put the input a single text field, since I want both to match first and/or last names on completion.

And in case someone is wondering, I am using ES 1.7.2


(system) #2