ElasticSearch
An intro to the ElasticSearch technology and how Planet 4 uses it.
Last updated
An intro to the ElasticSearch technology and how Planet 4 uses it.
Last updated
For P4 we have an ES cluster in Google Kubernetes Engine (GKE). Our cluster’s name is "elasticsearch" and consists of a total of 7 nodes which are 3 master-eligible nodes, 2 data nodes and 2 client nodes. At any given time only one of the master-eligible nodes is elected as actual Master node. Each data node of our cluster has multiple Indices (one for each P4 website). Each Index has 5 primary shards and 5 replica shards. The primary and the replica shards are stored in separate data nodes, so that if one of them drops then the other one can be used to continue operating without problems.
In order to talk to the ES cluster and send requests to it, we need to forward our local port 9200 to the Kubernetes pod with these two commands:
Then we can do curl requests locally to our localhost:9200 and those will be forwarded to our ES cluster in GKE.
In order for EP to talk to elasticsearch we need to provide the Host in the plugins Settings page:
http://p4-es-elasticsearch-client.default.svc.cluster.local:9200/
-> For production ES cluster
We use the ElasticPress plugin which translates the WP_Queries into an HTML request that elasticsearch understands and also passes data to the request in Json format. The simplest way to make EP act as a middle man (via code) is by adding this to our WP_Query arguments: $args['ep_integrate'] = true;
We do this here.
We have 2 classes related to P4 Search functionality. Search and ElasticSearch which extends the first one. Search should work with other plugins as well (like the SearchWP that we had prior to moving to elasticsearch). ElasticSearch adds all the functionality required to customize EP functionality to the needs of P4.