How to Use Elasticsearch with PHP + Examples

Elasticsearch is a popular search engine that is widely used for search and analytics applications. In this article, we'll explore how to use Elasticsearch with PHP, the benefits and drawbacks of doing so, how to install Elasticsearch with Docker, and some Elasticsearch alternatives.

What is Elasticsearch?

Elasticsearch is a search engine built on top of the Lucene library, which is an open-source full-text search engine written in Java. Elasticsearch provides a distributed, RESTful search and analytics engine, making it a popular choice for modern search applications.

It is designed to be scalable, fast, and reliable, and it can handle both structured and unstructured data.

Elasticsearch uses JSON-based APIs for searching and indexing data, and it provides real-time search capabilities that are ideal for applications that require near-instant search results. Elasticsearch is also used for log analysis, security analytics, and business analytics.

Benefits with Elasticsearch

First, it is scalable and can handle large amounts of data. Elasticsearch can be distributed across multiple nodes, which allows it to handle billions of documents and petabytes of data.

Second, it is fast and provides near-instant search results.

Elasticsearch is designed to be real-time and can provide search results in less than a second.

Third, it is easy to use and provides a simple API for searching and indexing data. Elasticsearch uses JSON-based APIs, which are easy to understand and use.

Fourth, it provides powerful analytics capabilities that can help organizations gain insights into their data. Elasticsearch can be used for log analysis, security analytics, and business analytics.

Finally, Elasticsearch is open-source and has a large community of users, which means that there is a lot of documentation and support available.

Drawbacks with Elasticsearch

Despite its benefits, there are also some drawbacks to using Elasticsearch.

It requires some expertise to set up and configure. Elasticsearch is a complex system that requires knowledge of distributed systems and data analysis.

Second, it can be expensive to run at scale. Elasticsearch requires a lot of resources, including RAM, CPU, and storage, which can be expensive to provision.

It can also be difficult to maintain. Elasticsearch requires regular maintenance and upgrades to ensure that it is running smoothly.

Elasticsearch can be difficult to secure as well. Elasticsearch can contain sensitive data, so it is important to ensure that it is properly secured.

What differs Elasticsearch from MySQL

While Elasticsearch and MySQL are both databases, they differ in several ways.

Elasticsearch is designed for search and analytics, while MySQL is designed for transactions. This means that Elasticsearch is optimized for fast searches and analytics, while MySQL is optimized for storing and retrieving data.

Elasticsearch is a distributed system, while MySQL is not. This means that Elasticsearch can be scaled horizontally across multiple nodes, while MySQL can only be scaled vertically by adding more resources to a single node.

Elasticsearch uses a JSON-based API, while MySQL uses SQL. This means that Elasticsearch is easier to use for search and analytics, while MySQL is easier to use for traditional database operations.

Install Elasticsearch with Docker

To install Elasticsearch with Docker, you can follow these steps:

Install Docker on your machine. Then, create a new directory for your Elasticsearch configuration files. Create a new file called "docker-compose.yml" in this directory.

Add the following code to the docker-compose.yml file:

version: '2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.0
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
      - ./data:/usr/share/elasticsearch/data

Save the docker-compose.yml file.

Open a terminal window and navigate to the directory where your docker-compose.yml file is located.

Run the following command to start Elasticsearch:

docker-compose up

Elasticsearch should now be running on http.

How to use Elasticsearch with PHP

To use Elasticsearch with PHP, you can use the official Elasticsearch PHP client, which provides a simple and easy-to-use interface for interacting with Elasticsearch. Here are the steps you can follow:

Install the Elasticsearch PHP client using Composer. You can do this by running the following command in your project directory:

composer require elasticsearch/elasticsearch

Create a new instance of the Elasticsearch client in your PHP code. You can do this using the following code:

require 'vendor/autoload.php';

$client = Elasticsearch\ClientBuilder::create()->build();

This creates a new Elasticsearch client instance that you can use to interact with Elasticsearch.

Index documents in Elasticsearch

To index a document, you can use the index method of the Elasticsearch client:

$params = [
    'index' => 'my_index',
    'id'    => 'my_id',
    'body'  => ['title' => 'My Document', 'content' => 'This is my document.'],
];

$response = $client->index($params);

This indexes a new document with the title "My Document" and the content "This is my document." in the index "my_index" with the ID "my_id".

Search for documents in Elasticsearch

To search for documents, you can use the search method of the Elasticsearch client:

$params = [
    'index' => 'my_index',
    'body'  => [
        'query' => [
            'match' => [
                'title' => 'document'
            ]
        ]
    ]
];

$response = $client->search($params);

This searches for all documents in the index "my_index" that have the word "document" in the title.

Delete documents in Elasticsearch

To delete a document, you can use the delete method of the Elasticsearch client:

$params = [
    'index' => 'my_index',
    'id'    => 'my_id',
];

$response = $client->delete($params);

This deletes the document with the ID "my_id" from the index "my_index".

Elasticsearch alternatives

Solr

Apache Solr is another popular search engine built on top of the Lucene library. It is similar to Elasticsearch in many ways and provides a scalable and fast search engine.

Algolia

Algolia is a cloud-based search platform that provides fast and relevant search results. It is designed for developers and provides an easy-to-use API for search and analytics.

Amazon Elasticsearch

Not really an alternative, but a convenient way of using it without hosting it yourself. Amazon Elasticsearch is a managed Elasticsearch service that is offered by Amazon Web Services (AWS). It provides a scalable and reliable Elasticsearch service that can be easily integrated with other AWS services.

Sphinx

Sphinx is an open-source search engine that is designed for full-text search. It is lightweight and easy to use, making it a popular choice for small-scale search applications.

Splunk

Splunk is a platform for log analysis and security analytics. It provides powerful analytics capabilities and can be used to gain insights into large amounts of data.

Updated