Postcodes and Structured Data

edit

We will use United Kingdom postcodes (postal codes in the United States) to illustrate how to use partial matching with structured data. UK postcodes have a well-defined structure. For instance, the postcode W1V 3DG can be broken down as follows:

  • W1V: This outer part identifies the postal area and district:

    • W indicates the area (one or two letters)
    • 1V indicates the district (one or two numbers, possibly followed by a letter)
  • 3DG: This inner part identifies a street or building:

    • 3 indicates the sector (one number)
    • DG indicates the unit (two letters)

Let’s assume that we are indexing postcodes as exact-value not_analyzed fields, so we could create our index as follows:

PUT /my_index
{
    "mappings": {
        "address": {
            "properties": {
                "postcode": {
                    "type":  "string",
                    "index": "not_analyzed"
                }
            }
        }
    }
}

And index some postcodes:

PUT /my_index/address/1
{ "postcode": "W1V 3DG" }

PUT /my_index/address/2
{ "postcode": "W2F 8HW" }

PUT /my_index/address/3
{ "postcode": "W1F 7HW" }

PUT /my_index/address/4
{ "postcode": "WC1N 1LZ" }

PUT /my_index/address/5
{ "postcode": "SW5 0BE" }

Now our data is ready to be queried.