0
votes

I'm completely new to elasticsearch and I'm trying to use elasticsearch completion suggester on an existing field called "identity.full_name", index = "search" and type = "person". I followed the below index to change the mappings of the field.

1)

POST /search/_close

2)

POST search/person/_mapping
{
    "person": {
      "properties": {
        "identity.full_name": {
          "type": "text",
          "fields":{
            "suggest":{
              "type":"completion"
            }
          }
        }
        }
      }
    }

3)

POST /search/_open

When I check the mappings at this point, using

GET search/_mapping/person/field/identity.full_name

I get the result,

{
  "search": {
    "mappings": {
      "person": {
        "identity.full_name": {
          "full_name": "identity.full_name",
          "mapping": {
            "full_name": {
              "type": "text",
              "fields": {
                "completion": {
                  "type": "completion",
                  "analyzer": "simple",
                  "preserve_separators": true,
                  "preserve_position_increments": true,
                  "max_input_length": 50
                },
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                },
                "suggest": {
                  "type": "completion",
                  "analyzer": "simple",
                  "preserve_separators": true,
                  "preserve_position_increments": true,
                  "max_input_length": 50
                }
              }
            }
          }
        }
      }
    }
  }
}

Which is suggesting that it has been updated to be a completion field.

However, when I'm querying to check if this works using,

GET search/person/_search
{
    "suggest": {
        "person-suggest" : {
            "prefix" : "EMANNUEL",
            "completion" : {
                "field" : "identity.full_name"
            }
        }
    }
}

It is giving me the error "Field [identity.full_name] is not a completion suggest field"

I'm not sure why I'm getting this error. Is there anything else I can try?

sample data:

  {
    "_index": "search",
    "_type": "person",
    "_id": "3106105149",
    "_score": 1,
    "_source": {
      "identity": {
        "id": "3106105149",
        "first_name": "FLORENT",
        "last_name": "TEBOUL",
        "full_name": "FLORENT TEBOUL"
        }
        }
        }

  {
    "_index": "search",
    "_type": "person",
    "_id": "125296353",
    "_score": 1,
    "_source": {
      "identity": {
        "id": "125296353",
        "first_name": "CHRISTINA",
        "last_name": "BHAN",
        "full_name": "CHRISTINA K BHAN"
        }
        }
        }

so when I do a GET based on prefix "CHRISTINA"

GET search/person/_search

{
    "suggest": {
        "person-suggest" : {
            "prefix" : "CHRISTINA",
            "completion" : {
                "field" : "identity.full_name.suggest"  
                }
            }
        }
    }

I'm getting all the results like a match_all query.

1

1 Answers

2
votes

You should use it like

GET search/person/_search

    {
        "suggest": {
            "person-suggest" : {
                "prefix" : "EMANNUEL",
                "completion" : {
                    "field" : "identity.full_name.suggest"
                }
            }
        }
    }

Mapping for GET search/_mapping/person/field/identity.full_name

{
  "search" : {
    "mappings" : {
      "person" : {
        "identity.full_name" : {
          "full_name" : "identity.full_name",
          "mapping" : {
            "full_name" : {
              "type" : "text",
              "fields" : {
                "suggest" : {
                  "type" : "completion",
                  "analyzer" : "simple",
                  "preserve_separators" : true,
                  "preserve_position_increments" : true,
                  "max_input_length" : 50
                }
              }
            }
          }
        }
      }
    }
  }
}