Creating a Geopoint Index via the REST API
This example quickly creates the same index as Creating a Geopoint Index via the UI.
The cURL command below was initially created via the Classic Editor in the UI, however the follwoing modifications were made.
-
The curl flag "-s" to suppress some runtime output.
-
The credentials "-u <username>:<password>" were altered to "-u ${CB_USERNAME}:${CB_PASSWORD}".
-
The hostname or IP address was replaced with ${CB_HOSTNAME}.
-
The commands output is piped through the utility jq to enhance readability.
-
The two (2) UUIDs were removed (similar to the below) because we want to make a new index not modify an existing one.
"uuid": "273a60635f5248e5", "sourceUUID": "2b421d183cb76aebbffa45424736ec2e",
The Creation Command
The full command to create the index is below and can be executed verbatim if you have the environment variable ${CB_USERNAME}, ${CB_PASSWORD} and ${CB_HOSTNAME} set.
curl -s -XPUT -H "Content-Type: application/json" \
-u ${CB_USERNAME}:${CB_PASSWORD} http://${CB_HOSTNAME}:8094/api/index/test_geopoint -d \
'{
"type": "fulltext-index",
"name": "test_geopoint",
"sourceType": "gocbcore",
"sourceName": "travel-sample",
"planParams": {
"maxPartitionsPerPIndex": 1024,
"indexPartitions": 1
},
"params": {
"doc_config": {
"docid_prefix_delim": "",
"docid_regexp": "",
"mode": "scope.collection.type_field",
"type_field": "type"
},
"mapping": {
"analysis": {},
"default_analyzer": "standard",
"default_datetime_parser": "dateTimeOptional",
"default_field": "_all",
"default_mapping": {
"dynamic": true,
"enabled": false
},
"default_type": "_default",
"docvalues_dynamic": false,
"index_dynamic": true,
"store_dynamic": false,
"type_field": "_type",
"types": {
"_default._default": {
"dynamic": true,
"enabled": true,
"properties": {
"geo": {
"dynamic": false,
"enabled": true,
"fields": [
{
"include_in_all": true,
"index": true,
"name": "geo",
"type": "geopoint"
}
]
}
}
}
}
},
"store": {
"indexType": "scorch",
"segmentVersion": 15,
"spatialPlugin": "s2"
}
},
"sourceParams": {}
}' | jq .
If you successfully create the index you should a response liekt the follwoing
{
"status": "ok",
"uuid": "274e2bf04ddc8d3e"
}
Test the Geopoint Index with a simple query
Request the first 10 item closet to a longitude of -2.235143
and a latitude of 53.482358
.
The target-field geo
is specified, as is a distance
of 100
miles: this is the radius within which target-locations must reside for their documents to be returned. Don’t worry about newlines when you paste the text.
curl -s -XPOST -H "Content-Type: application/json" \
-u ${CB_USERNAME}:${CB_PASSWORD} http://${CB_HOSTNAME}:8094/api/index/test_geopoint/query \
-d '{
"from": 0,
"size": 10,
"query": {
"location": {
"lon": -2.235143,
"lat": 53.482358
},
"distance": "100mi",
"field": "geo"
},
"sort": [
{
"by": "geo_distance",
"field": "geo",
"unit": "mi",
"location": {
"lon": -2.235143,
"lat": 53.482358
}
}
]
}' | jq .
The output of a ten (10) hits (from a total of 847 matching docs) is as follows
{
"status": {
"total": 1,
"failed": 0,
"successful": 1
},
"request": {
"query": {
"location": [
-2.235143,
53.482358
],
"distance": "100mi",
"field": "geo"
},
"size": 10,
"from": 0,
"highlight": null,
"fields": null,
"facets": null,
"explain": false,
"sort": [
{
"by": "geo_distance",
"field": "geo",
"location": {
"lat": 53.482358,
"lon": -2.235143
},
"unit": "mi"
}
],
"includeLocations": false,
"search_after": null,
"search_before": null
},
"hits": [
{
"index": "test_geopoint_274e2bf04ddc8d3e_4c1c5584",
"id": "landmark_17411",
"score": 0.025840756648257503,
"sort": [
" \u0001?E#9>N\f\"e"
]
},
{
"index": "test_geopoint_274e2bf04ddc8d3e_4c1c5584",
"id": "landmark_17409",
"score": 0.025840756648257503,
"sort": [
" \u0001?O~i*(kD,"
]
},
{
"index": "test_geopoint_274e2bf04ddc8d3e_4c1c5584",
"id": "landmark_17403",
"score": 0.025840756648257503,
"sort": [
" \u0001?Sg*|/t\u001f\u0002"
]
},
{
"index": "test_geopoint_274e2bf04ddc8d3e_4c1c5584",
"id": "hotel_17413",
"score": 0.025840756648257503,
"sort": [
" \u0001?U]S\\.e\u0002_"
]
},
{
"index": "test_geopoint_274e2bf04ddc8d3e_4c1c5584",
"id": "hotel_17414",
"score": 0.025840756648257503,
"sort": [
" \u0001?Z\u0000./\u0007Q\u0012\t"
]
},
{
"index": "test_geopoint_274e2bf04ddc8d3e_4c1c5584",
"id": "landmark_17410",
"score": 0.025840756648257503,
"sort": [
" \u0001?Z3T6 \u0010\u0019@"
]
},
{
"index": "test_geopoint_274e2bf04ddc8d3e_4c1c5584",
"id": "landmark_17412",
"score": 0.025840756648257503,
"sort": [
" \u0001?]-\u000fm?\u000b\u0014#"
]
},
{
"index": "test_geopoint_274e2bf04ddc8d3e_4c1c5584",
"id": "landmark_17408",
"score": 0.025840756648257503,
"sort": [
" \u0001?^DV7\u0014t:^"
]
},
{
"index": "test_geopoint_274e2bf04ddc8d3e_4c1c5584",
"id": "landmark_17406",
"score": 0.025840756648257503,
"sort": [
" \u0001?_<\u00009\u001eW\u0013\u0012"
]
},
{
"index": "test_geopoint_274e2bf04ddc8d3e_4c1c5584",
"id": "landmark_17397",
"score": 0.025840756648257503,
"sort": [
" \u0001?c\u001cx\u0010n\u0016Wl"
]
}
],
"total_hits": 847,
"max_score": 0.2099587543053028,
"took": 69084563,
"facets": null
}