How to install Elasticsearch on CentOS 6.7. Elasticsearch is a highly scalable open-source full-text search and analytics engine. It allows you to store, search, and analyze big volumes of data quickly and in near real time. In this article we’ll go over the steps to install Elasticsearch on CentOS 6.7.

Elasticsearch on CentOS

Elasticsearch is a search server based on Lucene. It is developed in Java and is released as open source under the terms of the Apache License. It is generally used as the underlying engine/technology that powers applications that have complex search features and requirements.

Nowadays you see more and more WooCommerce shops improving their searches with Elasticsearch. There is a great article about this on Pressjitsu, in which they utilize the 10up/ElasticPress WordPress plugin.

Elasticsearch supports RESTful operations. This means that you can use HTTP methods (GET, POST, PUT, DELETE, etc.) in combination with an HTTP URI (/collection/entry) to manipulate your data. The intuitive RESTful approach is both developer and user friendly.

To install Elasticsearch on CentOS, we only need a few commands. I installed Elasticsearch a little while ago, therefore the version used in this article (1.7.2) is older than the current stable: 2.1.1.

Install Java
Since Elasticsearch is developed in Java, we need to have Java installed:

sudo yum install java-1.7.0-openjdk.x86_64

Download Elasticsearch RPM


For Elasticsearch 2.1.1:


See the repository guide for how to add and install Elasticsearch through the repository.

Yum install the package

sudo yum install elasticsearch-1.7.2.noarch.rpm

For Elasticsearch 2.1.1:

sudo yum install elasticsearch-2.1.1.rpm

Activate Elasticsearch as a service

sudo chkconfig --add elasticsearch
sudo chkconfig elasticsearch on

Start Elasticsearch

sudo service elasticsearch start

Configuring Elasticsearch

Installing Elasticsearch wasn’t that hard and now we need to configure some of its parameters. Per default, you find its configuration in /etc/elasticsearch/, and elasticsearch.yml is where you configure the server settings.

This may interest you:   WordPress Plugin Vulnerability Dump - Part 1

I installed Elasticsearch once, on a single server as a test. Therefore I left almost everything untouched.



with the IP address you want your Elasticsearch server to listen on, localhost, or for example. Note that this parameter sets both the bind_host and publish_host configuration settings.

Restart Elasticsearch after making the changes:

sudo service elasticsearch restart

Testing and using Elasticsearch

Testing your newly installed Elasticsearch server is as easy as providing an HTTP GET verb to your server:

curl -X GET 'http://localhost:9200'
  "status" : 200,
  "name" : "Perfection",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.7.2",
    "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec",
    "build_timestamp" : "2015-09-14T09:49:53Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  "tagline" : "You Know, for Search"

Everything works 🙂 and now you can create an index using the HTTP PUT verb (straight from the documentation):

curl -XPUT 'http://localhost:9200/twitter/' -d '{
    "settings" : {
        "index" : {
            "number_of_shards" : 3,
            "number_of_replicas" : 2

Elasticsearch then confirms the creation:


The GET result is:

curl -X GET 'http://localhost:9200'/twitter/
  "twitter" : { 
    "aliases" : {},
    "mappings" : {},
    "settings" : {
      "index" : {
        "creation_date" : "1451379831681",
        "uuid" : "hHXeCbp-TcGwqa1TSqif5w",
        "number_of_replicas" : "2",
        "number_of_shards" : "3",
        "version" : {
          "created" : "1070299"
    "warmers" : {}

Elasticsearch in WordPress

A number of WordPress plugins for Elasticsearch exist, the earlier mentioned 10up/ElasticPress and also Fantastic ElasticSearch and WP ElasticSearch. There is a Tuts+ article that addresses the Fantastic ElasticSearch plugin.

This all eases adding Elasticsearch to your WordPress website.

Securing Elasticsearch

for shared hosting, multiple websites and indexes…

One of my main concerns is: security in Elasticsearch. I work for a hosting company offering shared web hosting, and nearly everything we set up needs to be able to be used by more than one client. I haven’t found a way to secure Elasticsearch for more than one client / website / index yet, have you?

This may interest you:   Monit monitoring on Ubuntu 14.04 VM on Hyper-V

Per default, Elasticsearch creates an index for every index name it receives, and since all WordPress Elasticsearch plugins automatically create an index called “wordpress”, you understand my concerns. So one important security option is to disable the automatic creation of indices.

The automatic, or dynamic creation of indices is controlled by the index.mapper.dynamic parameter in elasticsearch.yml. When set to true (its default), dynamic creation is allowed, so we need to set this to false. Open up /etc/elasticsearch/elasticsearch.yml in your favorite editor and change

index.mapper.dynamic: true


index.mapper.dynamic: false

An index is no longer automatically created, meaning you have to create it manually using the above PUT HTTP verb, for example: curl -XPUT '[index_name]/'.
However, for as far as I know, you need to recreate the entire WordPress database scheme in Elasticsearch manually… Whoops. See the post Mapping WordPress Posts to Elasticsearch on for more information on doing that.

Another important security measurement in Elasticsearch is HTTP basic authentication.

Elasticsearch 6.3.2 on CentOS 7.5 with Java-1.8.0-openjdk

Update 18-08-2018: In a nutshell we can use the following commands to install Elasticsearch 6.3.2 on CentOS 7.5 with Java-1.8.0-openjdk. Most of the other information in this article remains the same.

sudo yum install java-1.8.0-openjdk.x86_64
sudo rpm -import
sudo vim /etc/yum.repos.d/elasticsearch.repo

	name=Elasticsearch repository for 6.x packages

sudo yum install elasticsearch
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service

Conclusion running Elasticsearch on CentOS

Honestly, Elasticsearch is still new to me. I haven’t gone through the entire configuration thoroughly and really need to search for, and read-up on, securing Elasticsearch for shared web hosting. The Elasticsearch installation on CentOS is quite simple and straightforward.

This may interest you:   Installing Debian GNU/Linux 7.0 (Wheezy) on HP EliteBook 8570w

In this article I used an older version of CentOS (6.7), and soon I’ll redo these steps on installing a current version Elasticsearch on CentOS 7 and Java 8.

During testing with one index for one website, it speeds up WordPress searches drastically. Which is great! WordPress plugins also offer “and”,”or” options to the search, allowing you to search for a word in multiple categories except some other categories.

If you have some advice on securing and using Elasticsearch in the kind of environment I mentioned, please post your information, knowhow and links / articles as a comment below. I’d really appreciate that. I think HTTP basic authentication, elasticsearch-jetty and Elasticsearch behind a nginx reverse proxy are pretty good options.

You may also want to install Varnish Cache on CentOS, to further optimize your website content delivery.

Did this post help you solve a problem? Want to say thanks?

Did you find this post interesting? Did it help you solve a problem? If I’ve helped you out and you want to thank me, then why not buy me a coffee?

A small donation of only $5 helps out a lot in the development, research and hosting of this blog.

If I’ve helped you out and you want to thank me, why not buy me a coffee?

Thank you for your support.