Elasticsearch, the advanced Search and Analytics Engine
Tags: devops, productivity, testing
Published: 2020-07-05 19:15:53

>_Elasticsearch is an open-source, RESTful, distributed search and analytics engine built on Apache Lucene. Since its release in 2010, Elasticsearch has quickly become the most popular search engine, and is commonly used for log analytics, full-text search, security intelligence, business analytics, and operational intelligence use cases._


###**Why do we need Elasticsearch?**
Companies and products wherein there’s huge amounts of data associated with each project and that data is stored in a relational database, problems such as slow data retrieval, meaningful information being scattered among multiple tables, etc are faced every day. 

**"The relational database are slow when it comes to searching, fetching and updating huge data through database queries."**

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/lbu8zj5dmfptssmrpadb.jpeg)

These problems have a drastic impact on the user experience when the users have to face lag because of slow data retrieval and in turns it leads to loss of customers. In this rapidly emerging and competitive environment, loss of customers can be very dangerous to the business. That is why companies are on lookout for alternatives to relational databases and opting for Non-Relational or rather NoSQL databases.

>**And Elasticsearch is one such NoSQL database that works by retrieving and managing document -oriented or semi-structured data. It can be used to store and search all kinds of data.**

Its distributed architecture makes it possible to search and analyze huge volumes of data in real time. It allows you to start with one machine and scale to hundreds. Elasticsearch makes it easy to run a full-featured search cluster, though running it at scale still requires a substantial level of expertise. 

Besides full-text search-oriented use cases like product search, document search, email search, etc. Elasticsearch is often used for storing data that needs to be sliced and diced, grouped by various dimensions, and such. 

_Examples of such analytical use cases include the use of Elasticsearch for metrics, logs, traces, and other timeseries data._

###**How does Elasticsearch works?**
Elasticsearch uses an `inverted index` managed using Apache Lucene’s APIs.

In layman terms, Elasticsearch stores an inverted index which is nothing but a mapping of unique words to the list of locations of documents containing that unique word. In other words, Elasticsearch stores keywords in the database and maps it to the locations of all the documents that contains that keyword.

>_For example, the keyword “consign” will be mapped against all the documents that have reference to this word consign and whenever we search for this keyword, Elasticsearch will fetch us all the documents in the database that are stored in the row corresponding to this keyword._

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ekcsw32hkuawghcifamx.png)

This inverse indexing helps Elasticsearch achieve so much speed in searching and retrieving data from its database and hence Elasticsearch has lots of applications in searching and analytics domain. **_“It does feels like magic.”_**

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/vp6i10kek7zsa3r87nld.jpeg)

###**Terminology in Elasticsearch**
* **Index** → An index in Elasticsearch is a collection of documents that have similar structure, and it is used to store and fetch documents from Elasticsearch. It is equivalent to a database in RDBMS. As mentioned earlier Elasticsearch uses inverted index, which is similar to looking in the index in a book for specific keyword and then going to that page number rather than going through the entire book looking for that specific keyword.

* **Document** →Throughout this post, you might have read the word ‘Document’. A document is the basic and atomic entity of Elasticsearch that represents information. Documents in Elasticsearch are stored and retrieved in `JSON(JavaScript Object Notation Format)`. An index in Elasticsearch has single or multiple documents stored, and a document has single or multiple information stored in JSON format which are also referred to as “Fields”.

* **Mapping** → Mapping is the schema definition of the index in Elasticsearch. It is somewhat similar as to how document fields are indexed in Elasticsearch. Mappings can be modified anytime with adding new fields or sub fields is possible.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/mocwm7dxm0fbvgqmbmkr.png)

* **Node** → A node is a single instance of Elasticsearch process. It is a server that stores the actual Elasticsearch data and performs searching and indexing operations.

* **Cluster** → A cluster consists of single of multiple nodes running Elasticsearch process. Each Elasticsearch cluster works on master/slave concept where there is one active Master node and rest other nodes are slave nodes. The workload is distributed in the slave nodes by the master node.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/n81o6x9ytju6tzlzn4dt.png)

###**Applications of Elasticsearch**
1. **E-Commerce Search** → E-Commerce businesses are harnessing the power of Elasticsearch to improve their product catalogs and inventory searching. They have leveraged the power of Elasticsearch to provide advanced searching and filtering search results options to their customers.

2. **Logging Analytics** → Every operational activity generated logs, some of these events generated logs every second. This makes log storing and analytics a huge burden on the traditional tools. Elasticsearch is being used nowadays to store and process billions of records of logs and still ensure accuracy and consistency of the data for improved analytics.

3. **Textual Search** → Elasticsearch can be used for searching long texts for matching specific phrases.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/vpogtzumo5j16fd6371u.jpeg)

4. **Auto-Suggest and Auto-Complete** → Elasticsearch can be very powerful when it comes to providing auto-suggest and auto-complete features in any application. This can be done by traditional methods but Elasticsearch takes it whole new level in terms of quickness and accuracy.

5. **Business Analytics** → Elasticsearch is used by various companies to gain insights into customer purchasing patterns and improve their business strategies.

###**Future Scope**
Elasticsearch has a vast applications in majority of fields especially in the analytics and searching domain. This product already has a rapidly growing user base as many users are aware of it full potential and using it to their advantage. This tool already gives a tough competition to similar products in the market. And to warn them, Elasticsearch is really coming to beat them.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/g11lr4nyuk1x0ghvfihx.jpeg)

###**Conclusion**
_To conclude Elasticsearch is a very powerful tool with a lot of advanced capabilities that can be used in variety of applications depending on the use case. Most commonly, it is used with tools like Logstash and Kibana which makes up the complete ELK stack (Elasticsearch Logstash Kibana), but it can be used independently as well._

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/un3moysriqrgpvk6kzfv.jpeg)