loqate-verify-helmcharts

Verify: The Next Generation of Address Verification and Cleansing

Businesses of every size are increasingly managing the growth of, and demand for, cloud and SaaS technologies. Meanwhile customers expect their trusted partners to provide services that are hosted on the most capable, secure, scalable, and reliable platforms.

Verify uses cutting-edge products and services, and delivers them on a platform that offers the highest levels of security, scalability, and reliability. Not only that, but Verify also drives product innovation through the use of best-of-breed componentisation and modularisation, allowing for hands-free updates, simplified roll-out of feature enhancements, and on-demand scaling.

Verify’s Capabilities

Verify has a proven track record in providing customers with global data coupled with our superior parsing and matching engine.

Here are a few key points regarding the services and functionality you have access to when using Verify:

See loqate.com for field descriptions and server options.

What Verify Offers You

We recognise that our partners need solutions which enable you to manage your cloud estate seamlessly, using modern container orchestration to keep cost under control whilst scaling to meet demand.

With Verify we provide you with the same implementation we run, including out of the box Helm charts which allow you to deploy and run in your own cloud infrastructure with ease.

Observability is provided using Open Telemetry traces, stdout logging, and prometheus metrics, enabling you to gain insights into the Verify cluster.

Security

For vulnerability disclosure or security findings, please contact support@loqate.com.

Prerequisites

Please see below for details of the tools and requirements we recommend for any Verify installation.

Docker Hub

A Docker Hub ID and password will be required for installation. You can create a free account at [https://hub.docker.com/]. Once created, please share your Docker Hub ID with your Loqate representative so you are given the ability to download the set of Verify containers.

Tools

Verify has been tested using the version numbers stated above. Please avoid using earlier application versions than those stated.

Reference Data Storage

The reference data is accessed using a Persistent Volume (PV); it is downloaded using the installmanager chart and accessed by the spatial-api chart. The provided yaml files mount a local volume and will need updating/replacing with the details of your PV. The values.yaml files for both charts have storage properties for configuring the PV.

You will need to create a data storage folder for install manager.

Currently, to store all the data you will need at least 250Gi of storage and downloading it will take several hours. If you’re not using all datasets however, you will need less storage and the download will be quicker.

These charts will work with any RWX (ReadWriteMany) Persistent Volume, but faster storage will produce better response times.

Read more about k8s Persistent Volumes and their Access Modes.

Routing

Routing is handled by either Istio or a Kubernetes Ingress - the default is Ingress.

If you want to use Ingress, you will need an Ingress controller. Note that the Ingress resource only configures the controller, it does not install it.

Read more about the pre-requisites for getting Ingress to work.

As Verify takes advantage of new and developing technologies, best practices for routing are always evolving. For a detailed discussion on routing best practice, please get in touch with support@loqate.com to arrange a technical conversation.

Scaling

Each of the querycoordinator and spatial-api components can be scaled with either HPA or KEDA. By default they both use HPA, but they can be set independently.

Read more about HPA and learn more about KEDA.

As Verify takes advantage of new and developing technologies, best practices for managing the environment at scale are always evolving. For a detailed discussion on scaling best practice, please get in touch with support@loqate.com to arrange a technical conversation.

How to Use This Guide

This guide is split up into the following sections:

We recommend you complete the Quick Start Installation section before moving on to the Full Installation section.

How a Verify Installation Works

By having a Spatial-API deployment for the most searched countries, plus a catch-all deployment for the rest of the world (ROW), you can provision and scale each deployment according to expected traffic.

See the values.yaml files for resourcing spatialapi and querycoordinator. The commented out values in these files are able to serve requests for the whole world but are likely to change.

Components

Initial Setup

Before you do anything, it’s worth noting that you may need to change the default directory for the data installation. We’ll explain how to change this path later in this section, but first we will look at the default value.

This path is used to configure the PV for the host filesystem, assuming Windows Docker Desktop:

Claim Override: the default creates a Persistent Volume (PV) and a Persistent Volume Claim (PVC) to use the host filesystem. If you already have a PV and PVC setup to use network storage you will use an override to connect to this pre-existing PVC. The environment variable name for this is CLAIM_OVERRIDE. You will see how it is set and used for different cases through this document.

Next we’ll take you through how to make changes to those directories.

Unix

mkdir -p /opt/loqate/lqtcharts
cd /opt/loqate/lqtcharts

Unix settings

Unix will almost certainly require the default path for data installation to be changed. To allow the helmfile to pick up your new path you need to change the environment variable for this path as follows:

export LOQATE_NFS_SHARE=<DATA FOLDER>

Example:

export LOQATE_NFS_SHARE=/opt/loqate/data

Windows

New-Item -Path "\loqate\lqtcharts" -ItemType "Directory"
Set-Location "\loqate\lqtcharts"

Depending on your setup you may need to change the default path for data download and installation. To allow the helmfile to pick up your new path you need to change the environment variable for this path as follows. (“Please note the $ sign below is part of the command for setting environment variable on powershell.”):

$env:LOQATE_NFS_SHARE=<DATA FOLDER>

Example:

$env:LOQATE_NFS_SHARE="/run/desktop/mnt/host/c/loqate/data"

Quick Start Installation

To get you up and running with Verify as quickly as possible, we’ve provided this quick start method which uses Helmfile and, on Unix, the Helm plugin helm-diff. This will allow you to quickly get to a point where you can test your basic installation, before moving on to a more detailed setup afterwards.

Installing Helmfile

To begin with, you’ll need to install Verify using Helmfile - we’ve provided the instructions for how to do this in both Unix and Windows.

Whether using Unix or Windows, first make sure you’re in the directory that you created earlier (in the Initial Setup section)

Unix:

export CLAIM_OVERRIDE="<CLAIM NAME>"
export LICENSE_KEY="<API KEY>"
export DOCKER_USERNAME="<DOCKER USERNAME>"
export DOCKER_PASSWORD="<DOCKER PASSWORD>"
wget https://charts.loqate.com/helmfile.yaml -O helmfile.yaml
helmfile apply

Windows:

$env:CLAIM_OVERRIDE="<CLAIM NAME>"
$env:LICENSE_KEY="<API KEY>"
$env:DOCKER_USERNAME="<DOCKER USERNAME>"
$env:DOCKER_PASSWORD="<DOCKER PASSWORD>"
Invoke-WebRequest https://charts.loqate.com/helmfile.yaml -OutFile helmfile.yaml
helmfile sync

Note: If you want to run the quick start again without a data download, see Re-run quick start without data download.

Download Just a Subset of the Allowed Datasets

If you have a license that allows lots of datasets but you only want to download a subset of them, you can choose which datasets to download.

Set the environment variable LOQATE_PRODUCTS to the required value, for example "KBCOMMON,DSVGBR".

The datasets/products available to you are listed in your license email. You will always want KBCOMMON.

Unix:

export LOQATE_PRODUCTS="KBCOMMON,DSVGBR"

Windows:

$env:LOQATE_PRODUCTS="KBCOMMON,DSVGBR"

Checking the Progress of the Data Installation

The next step is to check the progress of the data installation - to do this, first get the name of the installmanager pod:

kubectl get pods -n loqate

Here’s an example output:

NAME                                READY   STATUS             RESTARTS      AGE
installmanager-787zf                1/1     Running            0             15s
querycoordinator-59d4dbfb8b-rt9cr   0/1     Running            0             14s
spatial-api-58fbdb8486-d52rc        0/1     Running            0             13s

Then get the logs of the pod:

kubectl logs installmanager-787zf -n loqate --follow

Example output:

Native library STLPort failed to load, ignore this if not using solaris OS.
java.lang.UnsatisfiedLinkError: no stlport in java.library.path
Welcome to the Installation Manager - version 15.0.0
Running using local API version 2.42.1.16022-8876f6e

Reading /src/im/silent.txt for silent installation...

Contacting license server to validate the license key.
+++
Done validating license key.

Fetching information from server about the available data packs.

Contacting license server for information on available updates.
+++
Done fetching information from server regarding available data packs.
----------------------------------------
Space available : 118.0 GB
Space required for download : XXX.X GB
----------------------------------------
Downloading data packs.

...

Completed downloading data packs.
----------------------------------------
Space available : 62.8 GB
Space required for install : XXX.X GB
----------------------------------------
Beginning installing of data packs.

...

Completed installing the data packs.
Datapack installation was successfull.
XXX of XXX datapack(s) installed successfully.
Installation complete. Editing loqate.ini file now...
ReferenceDataCacheSize=7
Updating loqate.ini
Edit complete

The data installation has finished when you see the Edit complete line.

Testing the Installation

You can test the Verify installation by sending requests through the system. We recommend you test both a GET request and a POST request, so we’ve included examples of both.

First open a port to receive requests (you may want to do this in a new shell because the command does not terminate):

kubectl port-forward -n loqate svc/querycoordinator 8900:8900

Then send a version request (GET) to determine if the software and data was successfully installed.

Unix:

curl -X GET http://localhost:8900/api/version

Successful response:

{"version":"2.44.0.16383-1f51bc7"}

Windows:

Invoke-WebRequest -Method GET http://localhost:8900/api/version

Successful response:

StatusCode        : 200
StatusDescription : OK
Content           : {"version":"2.44.0.16383-1f51bc7"}
RawContent        : HTTP/1.1 200 OK
                    Content-Length: 34
                    Content-Type: application/json; charset=utf-8
                    Date: Mon, 22 Aug 2022 11:10:08 GMT

                    {"version":"2.44.0.16383-1f51bc7"}
Forms             : {}
Headers           : {[Content-Length, 34], [Content-Type, application/json; charset=utf-8], [Date, Mon, 22 Aug 2022 11:10:08 GMT]}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 34

Now send a Verify request (POST).

Unix:

curl -X POST http://localhost:8900/verify -d '{"input":[{"Address1":"TheFoundation","Locality":"Chester","Country":"GB"}]}'

Successful output:

{"output":[{"AQI":"A","AVC":"P44-I44-P0-100","Address":"The Foundation\u003cBR\u003eHerons Way\u003cBR\u003eChester Business Park\u003cBR\u003eChester","Address1":"The Foundation","Address2":"Herons Way","Address3":"Chester Business Park","Address4":"Chester","AdministrativeArea":"Cheshire","Building":"The Foundation","Country":"GB","CountryName":"United Kingdom","DeliveryAddress":"The Foundation\u003cBR\u003eHerons Way\u003cBR\u003eChester Business Park","DeliveryAddress1":"The Foundation","DeliveryAddress2":"Herons Way","DeliveryAddress3":"Chester Business Park","DependentLocality":"Chester Business Park","HyphenClass":"B","ISO3166-2":"GB","ISO3166-3":"GBR","ISO3166-N":"826","Locality":"Chester","MatchRuleLabel":"1","Sequence":"1","Thoroughfare":"Herons Way"}]}

Windows:

Invoke-WebRequest http://localhost:8900/verify -Method POST -Body "{`"input`":[{`"Address1`":`"TheFoundation`",`"Locality`":`"Chester`",`"Country`":`"GB`"}]}"

Successful output:

StatusCode        : 200
StatusDescription : OK
Content           : {"output":[{"AQI":"A","AVC":"P44-I44-P0-100","Address":"The Foundation\u003cBR\u003eHerons Way\u003cBR\u003eChester Business Park\u003cBR\u003eChester","Address1":"The
                    Foundation","Address2":"Herons W...
RawContent        : HTTP/1.1 200 OK
                    Content-Length: 773
                    Content-Type: application/json; charset=utf-8
                    Date: Mon, 22 Aug 2022 11:40:03 GMT

                    {"output":[{"AQI":"A","AVC":"P44-I44-P0-100","Address":"The Foundation\u003c...
Forms             : {}
Headers           : {[Content-Length, 773], [Content-Type, application/json; charset=utf-8], [Date, Mon, 22 Aug 2022 11:40:03 GMT]}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 773

If one or both of the tests are unsuccessful, first check the Troubleshooting section below for information about the most likely error.

If you can’t find the error, check the logs for each pod.

How to Check the Logs

First get the pods:

$ kubectl get pods
NAME                                   READY   STATUS             RESTARTS      AGE
qc-querycoordinator-76c78c997c-qx2mb   1/1     Running            2 (18h ago)   18h
sa-spatial-api-79c4f874c8-rrb45        0/1     ImagePullBackOff   0             18h

Then run the following on the pod you wish to check the logs for:

kubectl logs <NAME>

If you still can’t find or resolve the error, please contact support@loqate.com to arrange a further discussion.

Once you’ve successfully tested your quick start install, you can move onto the next section to further tailor your installation.

Re-run Quick Start Without Data Download

You may find that you want to re-run the Quick Start process, but don’t need to re-download all of the data. To stop the data getting downloaded again, delete your current installation and remove the installmanager section of the helmfile.yaml.

helmfile purge

In helmfile.yaml:

needs:
    #- installmanager

Unix:

helmfile apply

Windows:

helmfile sync

Full Installation

With a Quick Start install completed, you can build on this by adding country-specific deployments and certified countries. We’ve included information on completing a full install using both Helmfile and Helm, allowing you to choose which option you would prefer.

Note: whether you are using Helm or Helmfile, please pay particular attention to the configuration settings below.

Important Configuration Settings

Docker Images

The components installmanager, spatial-api and querycoordinator all have associated Docker images. These Docker images are hosted in private repositories on Docker Hub, so you will need a Docker Hub account in order to be granted access.

If you want to pull specific images from docker hub for installmanager, spatial-api and querycoordinator use the following settings:

Helmfile Unix

For Unix helmfile set the following environment variables:

export LOQATE_INSTALLMANAGER_VERSION="<IMAGE TAG>"
export LOQATE_QUERY_COORDINATOR_VERSION="<IMAGE TAG>"
export LOQATE_SPATIAL_API_VERSION="<IMAGE TAG>"

Helmfile Windows

For Windows helmfile set the following environment variables:

$env:LOQATE_INSTALLMANAGER_VERSION="<IMAGE TAG>"
$env:LOQATE_QUERY_COORDINATOR_VERSION="<IMAGE TAG>"
$env:LOQATE_SPATIAL_API_VERSION="<IMAGE TAG>"

Helm

For helm installations add one of the following to your command line:

--set image.tag=<LOQATE INSTALLMANAGER IMAGE TAG>
--set image.tag=<LOQATE QUERY COORDINATOR IMAGE TAG>
--set image.tag=<LOQATE SPATIAL API IMAGE TAG>

Adding Country Specific Deployments

To get the best performance and flexible scaling, we recommend having spatial-api deployments dedicated to countries you anticipate will be serving large numbers of requests.

If you want to create a country specific deployment, you’ll need to set the verify.dataset value to the ISO3166-2 code for that country. We’ve included an example below for a GB deployment, using the default data path. (This will mainly apply to Windows installations).

helm install -n loqate sa-gb loqate/spatial-api --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.memberlistService=memberlist.loqate.svc --set verify.dataset=gb

Here’s an example using the changed path for data download and installation. Note the extra argument in the commands below set the path. As per Initial Setup:

helm install -n loqate sa-gb loqate/spatial-api --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set storage.path=<DATA FOLDER> --set app.memberlistService=memberlist.loqate.svc --set verify.dataset=gb

Certified Datasets (CASS, SERP, AMAS)

To use any of the certified datasets, you will need to access extra libraries. Given an appropriate license key, these will be downloaded and installed alongside the data, in sub-folder lib64.

Please note that for legal reasons, if you are located outside of the USA you will not be able to download the certified US (i.e. CASS) data.

Here’s an example of how (in Helm) to create an AU spatial-api deployment that can use the AMAS certified engine:

helm install -n loqate spatial-api-au loqate/spatial-api --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.memberlistService=memberlist.loqate.svc --set verify.dataset=au

For examples of how to change config values using Helmfile, see this section below.

Premium Datasets

There are currently three premium datasets: France, Ireland, and US.

You can have one deployment for all premium requests by setting verify.dataset value to row or have country specific deployments as described in Adding Country Specific Deployments

The premium US dataset requires more resources than other datasets. SpatialAPI will need at least these resources values:

    resources:
      requests:
        cpu: 2000m
        memory: 5250Mi
      limits:
        cpu: 2200m
        memory: 5775Mi

See helmfile-premium.yaml as an example. It includes premium environment variables for the standard config values.

Unix:

wget https://charts.loqate.com/helmfile-premium.yaml -O helmfile-premium.yaml

Windows:

Invoke-WebRequest https://charts.loqate.com/helmfile-premium.yaml -OutFile helmfile-premium.yaml

You’ll need two Loqate license keys, one for the standard datasets and the other for the premium datasets.

Note: Certify datasets are considered standard therefore should be included in the standard license and installed in the standard folder. Requests that include both the certify and premium options will have the premium option turned off internally.

Download each set of data using their own InstallManager job to different folders, standard and premium, by changing storage.path. See helmfile-install.yaml for an example.

Create a Spatial API deployment for each dataset. For those serving premium data, change the verify.premium value to true and set storage.path to the premium folder. The standard deployments should keep verify.premium as false and set storage.path to the standard folder.

The new InstallManager job and Spatial API deployment will need new names, be sure to update the name of the Spatial API needs to match the new InstallManager name. See helmfile-premium.yaml as an example.

Requests for premium data sets need to contain the premium and premiumCountries options:

{
    "options": {
        "premium": "true",
        "premiumCountries": ["FR", "IE", "US"]
    },
    "input": [
        {
            "Address1": "59 Parklands Court",
            "Address2": "Dublin",
            "PostalCode": "D24 CA39",
            "Country": "IE"
        }
    ]
}

The premiumCountries option can be used to control access to the specific datasets in a re-seller situation.

Helmfile

Helmfile can be used to easily install all components in a simple Kubernetes environment. It will automatically pull from the Loqate charts repository.

Note: Helmfile uses the helm-diff plugin for the helmfile apply command, which you can install with the command below. This plugin does not work on Windows, so we use helmfile sync instead.

helm plugin install https://github.com/databus23/helm-diff

To pull specific images from docker hub for installmanager, spatial-api and querycoordinator add to your command line as per Docker Images:

More information on Helmfile as well as how to use it can be found here: https://github.com/helmfile/helmfile

An example Helmfile can be downloaded from https://charts.loqate.com/helmfile.yaml

Install

The installation process for Helmfile is very simple, requiring the following commands.

Unix:

helmfile apply

Windows:

helmfile sync

Uninstall

The command to uninstall Helmfile in either Unix or Windows is:

helmfile purge

Config Values

There are various values you can configure within the Helmfile - in this section we will provide some examples of what you can configure and how.

Location of locally available GKR data to mount:

This needs to be set the same for both installmanager and spatial-api (and also uses slightly different paths in Unix and Windows)

Unix:

export LOQATE_NFS_SHARE=<DATA FOLDER>

Example:

export LOQATE_NFS_SHARE=/opt/loqate/data

Windows using Docker Desktop:

$env:LOQATE_NFS_SHARE=<DATA FOLDER>

Example:

$env:LOQATE_NFS_SHARE="/run/desktop/mnt/host/c/loqate/data"

Setting license key and products for installmanager:

Unix:

export LICENSE_KEY=<API KEY>

Windows:

$env:LICENSE_KEY=<API KEY>

To download a subset of the datasets on your license, use a comma separated list of the datasets as follows:

Unix:

export LOQATE_PRODUCTS=<PRODUCT LIST>

Example:

export LOQATE_PRODUCTS="KBCOMMON,DSVGBR"

Windows:

$env:LOQATE_PRODUCTS=<PRODUCT LIST>

Example:

$env:LOQATE_PRODUCTS="KBCOMMON,DSVGBR"

Setting dataset for spatial-api:

Here’s how to set a specific dataset for spatial-api, using ROW (i.e. ‘Rest of the World’) as an example:

  verify:
    dataset: "row"

To set a spatial-api for a specific certified dataset (for example Australia - ‘au’), you’ll need to create a new spatial-api section in the yaml file.

Copy the current spatial-api and give it a unique name, then set the dataset to au as shown below:

  verify:
    dataset: "au"

For more information about certified data sets see the earlier Certified Datasets (CASS, SERP, AMAS) section.

Helm

Follow the instructions below to install Verify using Helm (you can use all of the instructions below in both Unix and Windows).

To pull specific images from docker hub for installmanager, spatial-api and querycoordinator add to your command line as per Docker Images:

Note: if you are using your own custom Persistent Volume Claim (PVC) you need to set the claim override for both the installmanager and spatial-api installs:

--set storage.claimOverride=<PVC NAME>

Add Repo

helm repo add loqate https://charts.loqate.com

See Helm repo for command documentation.

Create Namespace

kubectl create namespace loqate

Install Data

If you changed the default directories for the data download and installation, you will need to add the appropriate paths to some Helm commands. The lines to add are as follows:

--set storage.path=<DATA FOLDER>

Install All Data

The command below uses the default data download and installation paths (this will mainly apply to Windows installations):

helm install -n loqate installmanager loqate/installmanager --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.licenseKey=<API KEY>

The following command uses the changed paths for data download and installation (note the extra arguments in the commands below set multiple paths, but you only need to add the ones you wish to overwrite. As per Initial Setup):

helm install -n loqate installmanager loqate/installmanager --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.licenseKey=<API KEY> --set storage.path=<DATA FOLDER>

Or, if you are using a PVC, you need to specify a claimOverride:

helm install -n loqate installmanager loqate/installmanager --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.licenseKey=<API KEY> --set storage.claimOverride=<PVC NAME>

Install Specific Datasets

To install a subset of the datasets you have in the license key you can add –set app.products=”KBCOMMON\,DSVGBR” as below.

Note the need to escape commas

The command below uses the default data path (this will mainly apply to Windows installations):

helm install -n loqate installmanager loqate/installmanager --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.licenseKey=<API KEY> --set app.products="KBCOMMON\,DSVGBR"

The following command uses the changed path for data installation. As per Initial Setup):

helm install -n loqate installmanager loqate/installmanager --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.licenseKey=<API KEY>--set storage.path=<DATA FOLDER> --set app.products="KBCOMMON\,DSVGBR"

It’s important to make sure the download is fully completed before continuing. See the section on Checking the Progress of the Data Installation earlier for details of how to do this.

Install Charts

Install memberlist:

helm install -n loqate memberlist loqate/memberlist

Install spatial-api and querycoordinator:

The command below uses the default data installation path (this will mainly apply to Windows installations):

helm install -n loqate spatial-api loqate/spatial-api --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.memberlistService=memberlist.loqate.svc
helm install -n loqate querycoordinator loqate/querycoordinator --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.memberlistService=memberlist.loqate.svc

The following command uses a changed path for data installation. As per Initial Setup):

helm install -n loqate spatial-api loqate/spatial-api --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set storage.path=<DATA FOLDER> --set app.memberlistService=memberlist.loqate.svc
helm install -n loqate querycoordinator loqate/querycoordinator --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.memberlistService=memberlist.loqate.svc

Alternatively, if you are using a PVC you need to specify the claimOverride for spatial-api:

helm install -n loqate spatial-api loqate/spatial-api --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set storage.claimOverride=<PVC NAME> --set app.memberlistService=memberlist.loqate.svc
helm install -n loqate querycoordinator loqate/querycoordinator --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.memberlistService=memberlist.loqate.svc

Check the spatial-api and querycoordinator have started:

kubectl get pods -n loqate

Example output:

NAME                                  READY   STATUS    RESTARTS      AGE
querycoordinator-ffdc5cfbc-2hj7w   1/1     Running   0             14m
spatial-api-6dbfbb7f88-pqqgj       1/1     Running   1 (14m ago)   15m

Wait until there is 1/1 in the READY column for spatial-api and querycoordinator. After this wait an extra 1 minute.

The memberlistService name is composed of <MEMBERLIST.RELEASE NAME>-<MEMBERLIST.CHART NAME>.<NAMESPACE>.svc. Changing any of these will require changing the set arguments to spatial-api and querycoordinator.

See Helm Install for command documentation.

Upgrade Chart

To pull specific images from docker hub for installmanager, spatial-api and querycoordinator add to your command line as per Docker Images:

helm upgrade <RELEASE NAME> <CHART> --install

The example below is an upgrade when you get a new license key with a new data set added:

helm upgrade -n loqate installmanager loqate/installmanager --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.licenseKey=<API KEY>

See Helm Upgrade for command documentation.

Uninstall Chart

helm uninstall -n loqate <RELEASE NAME>

Delete namespace

This removes all the Kubernetes components associated with the chart and deletes the release:

kubectl delete namespace loqate

This deletes the kubernetes namespace that was created for the Helm release.

See Helm uninstall for command documentation.

Full System Clean Up

If you ever need to do a full system clean up, here are the steps to take.

Helmfile-only Clean Up Commands

Perform the following:

helmfile purge

Helmfile and Helm Clean Up Commands

Delete the namespace:

kubectl delete namespace loqate

Delete the Persistent Volumes:

Get the persistent volumes:

kubectl get pv

If there are any persistent volumes for installmanager or spatial-api you can delete them with:

kubectl delete pv <NAME>

Check That the System Has Cleaned Up

$ kubectl -n loqate get pods
No resources found in loqate namespace.

$ kubectl -n loqate get services
No resources found in loqate namespace.

$ kubectl -n loqate get deployments
No resources found in loqate namespace.

$ kubectl get pv
No resources found

$ kubectl -n loqate get pvc
No resources found in loqate namespace.

Usage

Functions

The querycoordinator chart contains templates for a Kubernetes ingress and an Istio gateway, but both are disabled by default. To test the installation, forward port 8900 of the querycoordinator service and use the following URLs.

Function Method URL
Verify POST http://localhost:8900/verify
Version GET http://localhost:8900/api/version
GKR info GET http://localhost:8900/api/gkrinfo

Verify Request

Request Parameters

Name Description
input An array of addresses that you want to verify. For optimal processing, the country field should contain a valid ISO2 or ISO3 country code. Without a country code, requests will be routed to the ROW deployment. Please see How a Verify Installation Works and Important Configuration Settings.
options Used to specify various options and override processes.

Options comprised of the following:

More information about server options.

Response Fields

Name Description
output An array of matched records

Output comprised of the following:

See this complete list of field descriptions.

Request and Response Format

We’ve provided a selection of the most useful examples below for both sample requests and returns. Click on the expanding sections to see the details of each.

Request - Geocode as True (click to expand)
{
    "Options": {
        "Geocode": "true"
    },
    "input": [
        {
            "Address1": "GB Group",
            "Address2": "The Foundation",
            "PostalCode": "CH4 9GB",
            "Country": "GB"
        }
    ]
}
Response - Geocode as True
{
    "output": [
        {
            "AQI": "A",
            "AVC": "V44-I55-P6-100",
            "Address": "Gb Group<BR>The Foundation<BR>Herons Way<BR>Chester Business Park<BR>Chester<BR>CH4 9GB",
            "Address1": "Gb Group",
            "Address2": "The Foundation",
            "Address3": "Herons Way",
            "Address4": "Chester Business Park",
            "Address5": "Chester",
            "Address6": "CH4 9GB",
            "AdministrativeArea": "Cheshire",
            "Building": "The Foundation",
            "BuildingName": "The",
            "BuildingTrailingType": "Foundation",
            "BuildingType": "Foundation",
            "Country": "GB",
            "CountryName": "United Kingdom",
            "DeliveryAddress": "The Foundation<BR>Herons Way<BR>Chester Business Park",
            "DeliveryAddress1": "The Foundation",
            "DeliveryAddress2": "Herons Way",
            "DeliveryAddress3": "Chester Business Park",
            "DependentLocality": "Chester Business Park",
            "GeoAccuracy": "P4",
            "GeoDistance": "0.0",
            "HyphenClass": "B",
            "ISO3166-2": "GB",
            "ISO3166-3": "GBR",
            "ISO3166-N": "826",
            "Latitude": "53.162461",
            "Locality": "Chester",
            "Longitude": "-2.898728",
            "MatchRuleLabel": "C1ap",
            "Organization": "Gb Group",
            "OrganizationName": "Gb",
            "OrganizationTrailingType": "Group",
            "OrganizationType": "Group",
            "PostalCode": "CH4 9GB",
            "PostalCodePrimary": "CH4 9GB",
            "Sequence": "1",
            "Thoroughfare": "Herons Way"
        }
    ]
}
Request - Process Option as ‘Verify’
{
    "options": {
        "Processes":["Verify"]
    },
    "input": [
        {
            "Address1": "7511 Oakvale Ct",
            "PostalCode": "95660",
            "Locality": "North Highlands",
            "AdministrativeArea": "CA",
            "Country": "US"
        }
    ]
}
Response - Process Option as ‘Verify’
{
    "output": [
        {
            "AQI": "A",
            "AVC": "V44-I44-P7-100",
            "Address": "7511 Oakvale Ct<BR>North Highlands CA 95660-2733",
            "Address1": "7511 Oakvale Ct",
            "Address2": "North Highlands CA 95660-2733",
            "AdministrativeArea": "CA",
            "Country": "US",
            "CountryName": "United States",
            "DeliveryAddress": "7511 Oakvale Ct",
            "DeliveryAddress1": "7511 Oakvale Ct",
            "HyphenClass": "C",
            "ISO3166-2": "US",
            "ISO3166-3": "USA",
            "ISO3166-N": "840",
            "Locality": "North Highlands",
            "MatchRuleLabel": "Rlh",
            "PostalCode": "95660-2733",
            "PostalCodePrimary": "95660",
            "PostalCodeSecondary": "2733",
            "Premise": "7511",
            "PremiseNumber": "7511",
            "Sequence": "1",
            "SubAdministrativeArea": "Sacramento",
            "Thoroughfare": "Oakvale Ct"
        }
    ]
}
Request - Process Option as ‘Search’
{
    "input": [
        {
            "Country": "JP",
            "PostalCode": "408-0307"
        }
    ],
    "options": {
        "Processes": ["Search"],
        "ServerOptions": {
            "MaxResults": 3
        }
    }
}
Response - Process Option as ‘Search’
{
    "output": [
        [
            {
                "AQI": "A",
                "AVC": "A42-I44-P6-100",
                "Address": "1290 Mukawachoyanagisawa<BR>Hokuto-Shi Yamanashi 408-0307",
                "Address1": "1290 Mukawachoyanagisawa",
                "Address2": "Hokuto-Shi Yamanashi 408-0307",
                "AdministrativeArea": "Yamanashi",
                "Country": "JP",
                "CountryName": "Japan",
                "DeliveryAddress": "1290 Mukawachoyanagisawa",
                "DeliveryAddress1": "1290 Mukawachoyanagisawa",
                "ISO3166-2": "JP",
                "ISO3166-3": "JPN",
                "ISO3166-N": "392",
                "Locality": "Hokuto-Shi",
                "PostalCode": "408-0307",
                "PostalCodePrimary": "408-0307",
                "Premise": "1290",
                "PremiseNumber": "1290",
                "SearchLevel": "2",
                "SearchMethod": "Noparse",
                "SearchSimilarity": "100",
                "Sequence": "1",
                "Thoroughfare": "Mukawachoyanagisawa"
            },
            {
                "AQI": "A",
                "AVC": "A42-I44-P6-100",
                "Address": "1490 Mukawachoyanagisawa<BR>Hokuto-Shi Yamanashi 408-0307",
                "Address1": "1490 Mukawachoyanagisawa",
                "Address2": "Hokuto-Shi Yamanashi 408-0307",
                "AdministrativeArea": "Yamanashi",
                "Country": "JP",
                "CountryName": "Japan",
                "DeliveryAddress": "1490 Mukawachoyanagisawa",
                "DeliveryAddress1": "1490 Mukawachoyanagisawa",
                "ISO3166-2": "JP",
                "ISO3166-3": "JPN",
                "ISO3166-N": "392",
                "Locality": "Hokuto-Shi",
                "PostalCode": "408-0307",
                "PostalCodePrimary": "408-0307",
                "Premise": "1490",
                "PremiseNumber": "1490",
                "SearchLevel": "2",
                "SearchMethod": "Noparse",
                "SearchSimilarity": "100",
                "Sequence": "1",
                "Thoroughfare": "Mukawachoyanagisawa"
            },
            {
                "AQI": "A",
                "AVC": "A42-I44-P6-100",
                "Address": "1492 Mukawachoyanagisawa<BR>Hokuto-Shi Yamanashi 408-0307",
                "Address1": "1492 Mukawachoyanagisawa",
                "Address2": "Hokuto-Shi Yamanashi 408-0307",
                "AdministrativeArea": "Yamanashi",
                "Country": "JP",
                "CountryName": "Japan",
                "DeliveryAddress": "1492 Mukawachoyanagisawa",
                "DeliveryAddress1": "1492 Mukawachoyanagisawa",
                "ISO3166-2": "JP",
                "ISO3166-3": "JPN",
                "ISO3166-N": "392",
                "Locality": "Hokuto-Shi",
                "PostalCode": "408-0307",
                "PostalCodePrimary": "408-0307",
                "Premise": "1492",
                "PremiseNumber": "1492",
                "SearchLevel": "2",
                "SearchMethod": "Noparse",
                "SearchSimilarity": "100",
                "Sequence": "1",
                "Thoroughfare": "Mukawachoyanagisawa"
            }
        ]
    ]
}
Request - Process Option as ‘ReverseGeocode’
{
    "options": {
        "Processes": ["ReverseGeocode"],
        "ServerOptions": {
            "MaxResults": "3"
        }
    },
    "input": [
        {
            "Latitude": "37.560210",
            "Longitude": "-122.28564",
            "Country": "US"
        }
    ]
}
Response - Process Option as ‘ReverseGeocode’
{
    "output": [
        [
            {
                "Address": "999 Baker Way<BR>San Mateo Ca 94404",
                "Address1": "999 Baker Way",
                "Address2": "San Mateo Ca 94404",
                "AdministrativeArea": "Ca",
                "Country": "US",
                "CountryName": "United States",
                "DeliveryAddress": "999 Baker Way",
                "DeliveryAddress1": "999 Baker Way",
                "GeoDistance": "0.000000",
                "ISO3166-2": "US",
                "ISO3166-3": "USA",
                "ISO3166-N": "840",
                "Latitude": "37.560210",
                "Locality": "San Mateo",
                "Longitude": "-122.285640",
                "PostalCode": "94404",
                "PostalCodePrimary": "94404",
                "Premise": "999",
                "PremiseNumber": "999",
                "PremiseNumberRangeField": "999",
                "Sequence": "1",
                "Thoroughfare": "Baker Way"
            },
            {
                "Address": "2210 Bridgepointe Pkwy<BR>San Mateo Ca 94404",
                "Address1": "2210 Bridgepointe Pkwy",
                "Address2": "San Mateo Ca 94404",
                "AdministrativeArea": "Ca",
                "Country": "US",
                "CountryName": "United States",
                "DeliveryAddress": "2210 Bridgepointe Pkwy",
                "DeliveryAddress1": "2210 Bridgepointe Pkwy",
                "GeoDistance": "83.105411",
                "ISO3166-2": "US",
                "ISO3166-3": "USA",
                "ISO3166-N": "840",
                "Latitude": "37.559760",
                "Locality": "San Mateo",
                "Longitude": "-122.284150",
                "PostalCode": "94404",
                "PostalCodePrimary": "94404",
                "Premise": "2210",
                "PremiseNumber": "2210",
                "PremiseNumberRangeField": "2210",
                "Sequence": "1",
                "Thoroughfare": "Bridgepointe Pkwy"
            },
            {
                "Address": "1661 Fashion Island Blvd<BR>San Mateo Ca 94404",
                "Address1": "1661 Fashion Island Blvd",
                "Address2": "San Mateo Ca 94404",
                "AdministrativeArea": "Ca",
                "Country": "US",
                "CountryName": "United States",
                "DeliveryAddress": "1661 Fashion Island Blvd",
                "DeliveryAddress1": "1661 Fashion Island Blvd",
                "GeoDistance": "96.073047",
                "ISO3166-2": "US",
                "ISO3166-3": "USA",
                "ISO3166-N": "840",
                "Latitude": "37.559570",
                "Locality": "San Mateo",
                "Longitude": "-122.285320",
                "PostalCode": "94404",
                "PostalCodePrimary": "94404",
                "Premise": "1661",
                "PremiseNumber": "1661",
                "PremiseNumberRangeField": "1661",
                "Sequence": "1",
                "Thoroughfare": "Fashion Island Blvd"
            }
        ]
    ]
}
Request - Certify Option - Certified Data Set AMAS (AU)
{
   "options": {
        "certify": "true"
    },
    "input": [
        {
            "Address1": "5 Highview Crescent",
            "Locality": "Modanville",
            "AdministrativeArea": "New South Wales",
            "Country": "AU"
        }
    ]
}
Response - Certify Option - Certified Data Set AMAS (AU)
{
    "output": [
        {
            "AQI": "A",
            "AVC": "V44-I44-P3-100",
            "Address": "5 HIGHVIEW CRES<BR>MODANVILLE NSW 2480",
            "Address1": "5 HIGHVIEW CRES",
            "Address2": "MODANVILLE NSW 2480",
            "AdministrativeArea": "NSW",
            "Barcode": "1301013020020111200211313010021203313",
            "Building": "",
            "Country": "AU",
            "CountryName": "AUSTRALIA",
            "DPID": "96214624",
            "DeliveryAddress": "5 HIGHVIEW CRES",
            "DeliveryAddress1": "5 HIGHVIEW CRES",
            "ErrorCode": "213",
            "FloorNumber": "",
            "FloorType": "",
            "ISO3166-2": "AU",
            "ISO3166-3": "AUS",
            "ISO3166-N": "036",
            "Locality": "MODANVILLE",
            "LotNumber": "",
            "PostalCode": "2480",
            "PreSortZone": "18",
            "Premise": "5",
            "PrimaryAddressLine": "5 HIGHVIEW CRES",
            "PrimaryPremise": "5",
            "PrimaryPremiseSuffix": "",
            "PrintPostZone": "18",
            "SecondaryAddressLine": "",
            "SecondaryPremise": "",
            "SecondaryPremiseSuffix": "",
            "Sequence": "1",
            "SubBuildingFloor": "",
            "SubBuildingLeadingType": "",
            "SubBuildingNumber": "",
            "Thoroughfare": "HIGHVIEW CRES",
            "ThoroughfareName": "HIGHVIEW",
            "ThoroughfarePostDirection": "",
            "ThoroughfareTrailingType": "CRES"
        }
    ]
}
Request - Certify Option - Certified Data Set CASS (US)
{
    "options": {
        "certify": "true"
    },
    "input": [
        {
            "Address1": "999 Baker Way STE 320",
            "Locality": "San Mateo",
            "AdministrativeArea": "California",
            "PostalCode": "94404",
            "Country": "US"
        }
    ]
}
Response - Certify Option - Certified Data Set CASS (US)
{
    "output": [
        {
            "AQI": "A",
            "AVC": "V55-I55-P7-100",
            "Address": "999 BAKER WAY STE 320<BR>SAN MATEO CA 94404-1566",
            "Address1": "999 BAKER WAY STE 320",
            "Address2": "SAN MATEO CA 94404-1566",
            "AdministrativeArea": "CA",
            "AutoZoneIndicator": "D",
            "BusinessIndicator": " ",
            "CMRAIndicator": "N",
            "CarrierRoute": "C005",
            "CentralizedIndicator": "",
            "CheckDigit": "7",
            "CongressionalDistrict": "14",
            "Country": "US",
            "CountryName": "UNITED STATES",
            "CurbIndicator": "",
            "DPVConfirmedIndicator": "Y",
            "DPVFootnotes": "AABB",
            "DPVLACSIndicator": " ",
            "DefaultFlag": " ",
            "DeliveryAddress": "999 BAKER WAY STE 320",
            "DeliveryAddress1": "999 BAKER WAY STE 320",
            "DeliveryPointBarCode": "957",
            "DependentLocality": "",
            "DropCount": "",
            "DropSiteIndicator": " ",
            "EducationalIndicator": " ",
            "FIPSCountyCode": "081",
            "FalsePositiveIndicator": " ",
            "Finance": "056894",
            "Footnotes": "",
            "ISO3166-2": "US",
            "ISO3166-3": "USA",
            "ISO3166-N": "840",
            "LACSLinkCode": "",
            "LACSLinkIndicator": " ",
            "Locality": "SAN MATEO",
            "NDCBUIndicator": "",
            "NoStatIndicator": "N",
            "Organization": "",
            "OtherIndicator": "",
            "PMBNumber": "",
            "PMBType": "",
            "PostBoxNumber": "",
            "PostBoxType": "",
            "PostalCode": "94404-1566",
            "PostalCodePrimary": "94404",
            "PostalCodeSecondary": "1566",
            "PostalCodeSecondaryRangeHigh": "1566",
            "PostalCodeSecondaryRangeLow": "1566",
            "Premise": "999",
            "PremiseNumber": "999",
            "PrimaryAddressLine": "999 BAKER WAY STE 320",
            "PrimaryNumRangeCode": "O",
            "PrimaryNumRangeHigh": "0000000999",
            "PrimaryNumRangeLow": "0000000999",
            "RecordType": "H",
            "ResidentialDelivery": "N",
            "ReturnCode": "31",
            "SUITELinkFootnote": "",
            "SeasonalIndicator": " ",
            "SecondaryAddressLine": "SAN MATEO CA 94404-1566",
            "SecondaryNumRangeCode": "E",
            "SecondaryNumRangeHigh": "00000320",
            "SecondaryNumRangeLow": "00000320",
            "Sequence": "1",
            "SubAdministrativeArea": "SAN MATEO",
            "SubBuilding": "STE 320",
            "SubBuildingLeadingType": "STE",
            "SubBuildingNumber": "320",
            "Thoroughfare": "BAKER WAY",
            "ThoroughfareName": "BAKER",
            "ThoroughfarePostDirection": "",
            "ThoroughfarePreDirection": "",
            "ThoroughfareTrailingType": "WAY",
            "ThrowbackIndicator": "N",
            "VacantIndicator": "Y",
            "eLOTCode": "A",
            "eLOTNumber": "0074"
        }
    ]
}
Request - Certify Option - Certified Data Set SERP (CA)
{
    "options": {
        "certify": "true"
    },
    "input": [
        {
            "Address1": "8 Charlotte St # 8, Toronto, Ontario, M5V 0K4",
            "Country": "CA"
        }
    ]
}
Response - Certify Option - Certified Data Set SERP (CA)
{
    "output": [
        {
            "AQI": "C",
            "AVC": "V55-I55-P6-091",
            "AddInfo": "",
            "Address": "8-8 CHARLOTTE ST<BR>TORONTO ON  M5V 0K4",
            "Address1": "8-8 CHARLOTTE ST",
            "Address2": "TORONTO ON  M5V 0K4",
            "AdministrativeArea": "ON",
            "Country": "CA",
            "CountryName": "CANADA",
            "DeliveryAddress": "8-8 CHARLOTTE ST",
            "DeliveryAddress1": "8-8 CHARLOTTE ST",
            "EndExpiryDate": "2022-06-16",
            "ISO3166-2": "CA",
            "ISO3166-3": "CAN",
            "ISO3166-N": "124",
            "Locality": "TORONTO",
            "PostalCode": "M5V 0K4",
            "PostalCodePrimary": "M5V 0K4",
            "Premise": "8",
            "PremiseNumber": "8",
            "Result": "VALID",
            "Sequence": "1",
            "SerpStatusEx": "V",
            "StartExpiryDate": "2022-05-13",
            "SubBuilding": "8",
            "SubBuildingNumber": "8",
            "SubBuildingType": "-",
            "Thoroughfare": "CHARLOTTE ST",
            "ThoroughfareName": "CHARLOTTE",
            "ThoroughfareTrailingType": "ST",
            "ThoroughfareType": "ST"
        }
    ]
}
Request - Enhance Option to Return Enhanced Data Set
{
    "options": {
        "Enhance": "true"
    },
    "input": [
        {
            "Address1": "805 Veterans Street RedwoodCity california USA",
            "PostalCode": "",
            "Locality": "",
            "AdministrativeArea": "",
            "Country": ""
        }
    ]
}
Response - Enhance Option to Return Enhanced Data Set
{
    "output": [
        {
            "AQI": "C",
            "AVC": "V42-I44-P3-092",
            "Address": "805 Veterans Blvd<BR>Redwood City CA 94063-1734",
            "Address1": "805 Veterans Blvd",
            "Address2": "Redwood City CA 94063-1734",
            "AdministrativeArea": "CA",
            "AdministrativeAreaISO2": "US-CA",
            "CAMEO_CAT": "9C",
            "CAMEO_GRP": "9",
            "CAMEO_INT": "53",
            "CBSAMetropolitanStatisticalArea": "San Francisco-Oakland-Berkeley, Ca=41860",
            "CensusClassCode": "C1",
            "CensusCode": "60102",
            "CensusIndicator": "Locality",
            "Country": "US",
            "CountryName": "United States",
            "DeliveryAddress": "805 Veterans Blvd",
            "DeliveryAddress1": "805 Veterans Blvd",
            "GNISFeatureID": "2410919",
            "HyphenClass": "C",
            "ISO3166-2": "US",
            "ISO3166-3": "USA",
            "ISO3166-N": "840",
            "Locality": "Redwood City",
            "MatchRuleLabel": "C2 1 1 1 1",
            "MetropolitanDivision": "San Francisco-San Mateo-Redwood City, Ca=41884",
            "PostalCode": "94063-1734",
            "PostalCodePrimary": "94063",
            "PostalCodeSecondary": "1734",
            "Premise": "805",
            "PremiseNumber": "805",
            "Sequence": "1",
            "SubAdministrativeArea": "San Mateo",
            "Thoroughfare": "Veterans Blvd",
            "ThoroughfareName": "Veterans",
            "ThoroughfareTrailingType": "St",
            "ThoroughfareType": "St",
            "TimeZone_DST": "-07:00",
            "TimeZone_Name": "Pacific Standard Time",
            "TimeZone_UTC": "-08:00"
        }
    ]
}
Request - Server Options
{
    "Options": {
        "ServerOptions": {
            "OutputAddressFormat": "true",
            "OutputScript": "Native"
        }
    },
    "input": [
        {
            "Address": "1290 Mukawachoyanagisawa,Hokuto-Shi Yamanashi 408-0307",
            "Country": "JP"
        }
    ]
}
Response - Server Options
{
    "output": [
        {
            "AQI": "A",
            "AVC": "V44-I44-P6-100",
            "Address": "408-0307<BR>山梨県北杜市武川町柳澤1290",
            "Address1": "408-0307",
            "Address2": "山梨県北杜市武川町柳澤1290",
            "AddressFormat": "PostalCode<BR>AdministrativeAreaLocalityThoroughfarePremise",
            "AdministrativeArea": "山梨県",
            "Country": "JP",
            "CountryName": "Japan",
            "DeliveryAddress": "武川町柳澤1290",
            "DeliveryAddress1": "武川町柳澤1290",
            "DeliveryAddressFormat": "ThoroughfarePremise",
            "HyphenClass": "C",
            "ISO3166-2": "JP",
            "ISO3166-3": "JPN",
            "ISO3166-N": "392",
            "Locality": "北杜市",
            "MatchRuleLabel": "V1a",
            "PostalCode": "408-0307",
            "PostalCodePrimary": "408-0307",
            "Premise": "1290",
            "PremiseNumber": "1290",
            "Sequence": "1",
            "Thoroughfare": "武川町柳澤"
        }
    ]
}


Using the AI Parser

AI Data Storage

The AI Parser requires a Persistent Volume, ideally different from the main data storage. The data is downloaded using installaidata chart and accessed by the ai-parse and tfserve charts. The provided yaml files mount a local volume and will need updating/replacing with the details of your PV. The values.yaml files for both charts have storage properties for configuring the PV.

Currently, to store all the data you will need at least 4Gi of storage.

These charts will work with any RWX (ReadWriteMany) Persistent Volume, but faster storage will produce better response times.

Read more about k8s Persistent Volumes and their Access Modes.

AI Parser Components

AI Parser Helmfile

The helmfile contains releases for using the AI Parser. Not everyone will want to use the AI parser, so they are commented out by default. If you want to use the AI Parser, it is recommended that you get the base Verify installation working first, then uncomment the AI Parser sections.

To enable the use of AI parsing you need to enable it by passing a value to Query Coordinator. In helmfile.yaml, in the querycoordinator release, under values: add the following:

        app:
          allow_aiparser: true

The helmfile uses environment variables to enable you to override the default storage options. These are:

To use the default path, which is configured for use on Windows using docker-desktop, do not set the environment variables.

To use a different local path, i.e. a host path accessible from all pods:

Unix:

export LOQATE_AIPARSER_STORAGE_PATH="<HOST PATH>"

Windows:

$env:LOQATE_AIPARSER_STORAGE_PATH="<HOST PATH>"

To use an NFS share and have the PV and PVC created for you:

Unix:

export LOQATE_AIPARSER_STORAGE_TYPE="nfs"
export LOQATE_AIPARSER_STORAGE_SERVER="<NFS SERVER IP ADDRESS>"
export LOQATE_AIPARSER_STORAGE_PATH="<NFS PATH>"

Windows:

$env:LOQATE_AIPARSER_STORAGE_TYPE="nfs"
$env:LOQATE_AIPARSER_STORAGE_SERVER="<NFS SERVER IP ADDRESS>"
$env:LOQATE_AIPARSER_STORAGE_PATH="<NFS PATH>"

To use a PVC you have already created:

Unix:

export LOQATE_AIPARSER_CLAIM_OVERRIDE="<CLAIM NAME>"

Windows:

$env:LOQATE_AIPARSER_CLAIM_OVERRIDE="<CLAIM NAME>"

Once the storage is configured, simply uncomment the AI Parser sections and apply/sync the helmfile as usual.

Unix:

helmfile apply

Windows:

helmfile sync

AI Parser Helm

Installing the Data Models

To enable the use of AI parsing you need to enable it by passing a value to Query Coordinator. When installing querycoordinator set the app.allow_aiparser value to true:

helm install -n loqate querycoordinator loqate/querycoordinator --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set app.memberlistService=memberlist.loqate.svc --set app.allow_aiparser=true

The helm charts use a number of values to enable you to override the default storage options. These are:

To use the default path:

helm install -n loqate installaidata loqate/installaidata --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD>

To use a different local path, i.e. a host path accessible from all pods:

helm install -n loqate installaidata loqate/installaidata --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set storage.path=<DATA FOLDER>

You can provide details to an NFS share using the first three values, in which case the PV and PVC will be created for you:

helm install -n loqate installaidata loqate/installaidata --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set storage.type=nfs --set storage.path=<NFS FOLDER> --set storage.server=<NFS IP ADDR>

Alternatively, you can create your own PV & PVC and use the name of the claim:

helm install -n loqate installaidata loqate/installaidata --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set storage.claimOverride=<CLAIM NAME>

Installing the AI Parser Components

Both the aiparser and tfserve components need access to the data installed above. Similarly, you need to specify the storage options used above.

To use the default paths:

helm install -n loqate ai-parse loqate/ai-parse --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD>

helm install -n loqate tfserve loqate/tfserve --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD>

To use a different local path:

helm install -n loqate ai-parse loqate/ai-parse --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set storage.path=<DATA FOLDER>

helm install -n loqate tfserve loqate/tfserve --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set storage.path=<DATA FOLDER>

To use an NFS share:

helm install -n loqate ai-parse loqate/ai-parse --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set storage.type=nfs --set storage.path=<NFS FOLDER> --set storage.server=<NFS IP ADDR>

helm install -n loqate tfserve loqate/tfserve --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set storage.type=nfs --set storage.path=<NFS FOLDER> --set storage.server=<NFS IP ADDR>

To use an existing PVC:

helm install -n loqate ai-parse loqate/ai-parse --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set storage.claimOverride=<CLAIM NAME>

helm install -n loqate tfserve loqate/tfserve --set imageCredentials.username=<DOCKERHUB USERNAME> --set imageCredentials.password=<DOCKERHUB PASSWORD> --set storage.claimOverride=<CLAIM NAME>

AI Parser Requests

For requests to use AI Parsing, they need to have an extra option set:

Request - AI Parse Option
{
    "options": {
        "aiparse": "true"
    },
    "input": [
        {
            "Address": "Commander Naval Air Force Box 357051 Nasni San Diego CA 92135",
            "Country": "US"
        }
    ]
}
Response - AI Parse Option
{
    "output": [
        {
            "AQI": "C",
            "AVC": "V55-I55-P7-092",
            "Address": "Air Commander Naval Nasni San
Box 357051
San Diego CA 92135-7051", "Address1": "Air Commander Naval Nasni San", "Address2": "Box 357051", "Address3": "San Diego CA 92135-7051", "AdministrativeArea": "CA", "BoxType": "Box", "Country": "US", "CountryName": "United States", "DeliveryAddress": "Box 357051", "DeliveryAddress1": "Box 357051", "HyphenClass": "C", "ISO3166-2": "US", "ISO3166-3": "USA", "ISO3166-N": "840", "ISO31662": "Ca", "ISO31663": "Can", "Locality": "San Diego", "MatchRuleLabel": "C1a", "Organization": "Air Commander Naval Nasni San", "OrganizationName": "Air Commander Naval Nasni San", "PostBox": "Box 357051", "PostBoxNumber": "357051", "PostBoxType": "Box", "PostalCode": "92135-7051", "PostalCodePrimary": "92135", "PostalCodeSecondary": "7051", "Sequence": "1", "SubAdministrativeArea": "San Diego" } ] }
Response - Without AI Parse Option
{
    "output": [
        {
            "AQI": "C",
            "AVC": "P22-I25-P6-100",
            "Address": "Commander Naval Air Force
Nasni Box 357051
San Diego CA 92135", "Address1": "Commander Naval Air Force", "Address2": "Nasni Box 357051", "Address3": "San Diego CA 92135", "AdministrativeArea": "CA", "BoxNumber": "357051", "BoxType": "Box", "Country": "US", "CountryName": "United States", "DeliveryAddress": "Nasni Box 357051", "DeliveryAddress1": "Nasni Box 357051", "HyphenClass": "C", "ISO3166-2": "US", "ISO3166-3": "USA", "ISO3166-N": "840", "Locality": "San Diego", "MatchRuleLabel": "C6", "Organization": "Commander Naval Air Force", "OrganizationName": "Commander Naval Air Force", "PostalCode": "92135", "PostalCodePrimary": "92135", "Premise": "Box 357051", "PremiseNumber": "Box 357051", "Sequence": "1", "SubAdministrativeArea": "San Diego", "Thoroughfare": "Nasni", "ThoroughfareName": "Nasni" } ] }

Troubleshooting

In this section we’ve put together some suggestions for how to handle commonly-found errors or problems.

The instructions below should apply if you get one of the following errors from a query:

Suggested Fix

First, make sure your install manager finished properly as per the Checking the Progress of the Data Installation section.

Then wait three minutes before checking whether the error is still happening.

If the error is still happening:

kubectl get pods -n loqate
 kubectl delete pods <NAME> -n loqate

If all pods are in service (i.e. 1/1) but you are still getting the “No spatialapi available” or “Failed to process” then:

If the above has still not fixed the issue then try the following:

helm list -n loqate
helm delete -n loqate <NAME>
kubectl get pods -n loqate

If you are still getting the error, delete each release and reinstall one at a time

If the error has still not been resolved, please contact support@loqate.com to arrange a further discussion.

TERMS AND CONDITIONS FOR USE

1. DEFINITIONS

2. LICENCE

2.1 Subject to the terms and conditions of this Licence, GBG hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, revocable licence to use the Loqate Verify Software provided always that such use of the Loqate Verify Software is with a GBG Service and / or Software only.

2.2 By using the Loqate Verify Software You agree that:

2.2.1 You will not use or exploit the Intellectual Property Rights in the Loqate Verify Software or permit others to use or exploit the Intellectual Property Rights in the Loqate Verify Software outside of the terms of the Licence;

2.2.2 Your use of the Loqate Verify Software through any software, equipment, materials or services not provided by GBG will not infringe the rights of any third party.

3. DISCLAIMER OF WARRANTY

Unless required by applicable law or agreed to in writing, GBG provides the Verify Software on an “as is” basis. Any and all warranties, conditions and other terms relating to the Verify Software whether express or implied by law, custom or otherwise are, to the fullest extent permitted by law, excluded from the Licence. GBG shall not be responsible for the decisions that You make as a result of the information, Verify Software or data that GBG provides to the You. You are solely responsible for determining the appropriateness of using the Loqate Verify Software and assume any risk associated with Your exercise of permissions under this Licence.

4. LIMITATION OF LIABILITY

In no event shall GBG be liable to You , whether such liability arises in contract, tort (including, without limitation, negligence) misrepresentation or otherwise for damages, including any direct, indirect, special, incidental, or consequential damages whatsoever arising as a result of this Licence or out of the use or inability to use the Loqate Verify Software (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if GBG has been advised of the possibility of such damages.

Application Version Information

SecretAppVersion: 1.16.0

SpatialAPIAppVersion: 0.1.76093

MemberlistAppVersion: 0.1.0

QueryCoordinatorAppVersion: 0.1.75261

InstallManagerAppVersion: 0.1.22799

InstallAIDataAppVersion: 0.1.37868