{
  "type": "autocomplete",
  "body": {
    "query": {
      "bool": {
        "must": [
          {
            "multi_match": {
              "fields": ["phrase.default", "phrase.en"],
              "analyzer": "peliasQuery",
              "query": "foo",
              "boost": 1,
              "type": "phrase",
              "slop": 3
            }
          }
        ],
        "should": [
          {
            "function_score": {
              "query": {
                "match_all": {}
              },
              "max_boost": 20,
              "functions": [
                {
                  "field_value_factor": {
                    "modifier": "log1p",
                    "field": "popularity",
                    "missing": 1
                  },
                  "weight": 1
                }
              ],
              "score_mode": "first",
              "boost_mode": "replace"
            }
          },
          {
            "function_score": {
              "query": {
                "match_all": {}
              },
              "max_boost": 20,
              "functions": [
                {
                  "field_value_factor": {
                    "modifier": "log1p",
                    "field": "population",
                    "missing": 1
                  },
                  "weight": 3
                }
              ],
              "score_mode": "first",
              "boost_mode": "replace"
            }
          },{
            "function_score": {
              "query": {
                "match_all": {}
              },
              "min_score": 1,
              "boost": 5,
              "max_boost": 50,
              "score_mode": "sum",
              "boost_mode": "multiply",
              "functions": [{
                "filter": {
                  "match": {
                    "source": "openstreetmap"
                  }
                },
                "weight": 5
              },{
                "filter": {
                  "match": {
                    "layer": "transit"
                  }
                },
                "weight": 3
              }]
            }
          }
        ]
      }
    },
    "size": 10,
    "track_scores": true,
    "sort": [
      "_score"
    ]
  }
}
