In our increasingly data-driven world, the efficient storage, retrieval, and analysis of information are paramount. Enter Elasticsearch: a powerful tool designed for handling vast datasets and executing rapid searches. In this guide, we’ll learn about the basic terminologies, key concepts, and how to perform CRUD operations in ElasticSearch.
Elasticsearch is a powerful, open-source search and analytics engine built on top of Apache Lucene. It’s designed to handle large-scale data processing, real-time search, and analytics with ease. Whether you’re dealing with log data, documents, geospatial data, or any other form of data, Elasticsearch can help you store, search, and analyze it effectively.
Elasticsearch is built to scale horizontally, meaning you can add more nodes to your Elasticsearch cluster as your data grows, ensuring consistent performance and reliability even as your workload increases without breaking a sweat.
Elasticsearch also provides a rich set of APIs and query languages, allowing you to perform complex searches, aggregations, and analytics on your data. Whether you need to perform full-text search, filter data based on certain criteria, or run aggregations to gain insights into your data, Elasticsearch has you covered.
In addition to its powerful search capabilities, Elasticsearch integrates seamlessly with other components of the Elastic Stack, including Logstash for data ingestion, Kibana for visualization and monitoring, and Beats for lightweight data shippers. This allows you to build end-to-end data pipelines for ingesting, processing, analyzing, and visualizing your data.
Related read: Dive into Elasticsearch: A Step-by-Step Guide to Getting Started
Nodes: Nodes are individual servers that form a part of the Elasticsearch cluster. Each node stores data, participates in cluster management, and performs indexing and search operations.
Indices: Indices are collections of documents that share similar characteristics. Each index is divided into multiple shards for scalability and performance.
Shards: Shards are smaller subsets of an index that contain a portion of the index’s data. Elasticsearch distributes these shards across nodes in the cluster, allowing for parallel processing and improved performance.
Replica: Replicas are copies of primary shards in Elasticsearch. They serve as backups for high availability and fault tolerance purposes. Replicas also contribute to reading scalability by allowing search queries to be distributed across multiple copies of the data.
Kibana, part of the Elastic Stack, provides a user interface for querying Elasticsearch data and creating visualizations. Users can construct queries using the Elasticsearch Query DSL or the Lucene query syntax directly within the Kibana interface. Kibana also offers pre-built visualizations and dashboards for monitoring and analyzing data, making it easy to derive insights from Elasticsearch data.
Let’s see an example of how to create an index, and how to add mapping to an index using Kibana Dashboard.
PUT /index_name
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"phones": {
"type": "nested",
"properties":{
"number": {
"type": "keyword"
},
"lineType": {
"type": "text",
"index":false
}
}
}
}
},
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
}
}
This query is used to create an index in ElasticSearch where the index_name specifies the name of the index you want to create for eg if you want to create an index with the name employees we will replace index_name with employees after running this query our index will get created.
Deciding on the number of shards depends on the factors like size of the data, indexing, search throughput cluster size and nodes.
Deciding on the number of replicas in Elasticsearch involves considerations such as fault tolerance, search performance, resource utilization, and operational overhead.
Each document i.e. our employee has a ‘name’ which is a text. We have marked phones as nested as employees can have more than one phone.
Inside phones, we have defined two properties:
Now let’s see an example of how to add a document to an elastic search.
POST /index_name/_doc
{
"name": "Test Employee",
"phones": [
{
"number": "1234567890",
"lineType": "Mobile"
},
{
"number": "9876543210",
"lineType": "Landline"
}
]
}
The above describes a document with the name ‘Test Employee’ which has two phone numbers and a type. After running this query document will be inserted in the elastic search. Each document has _id associated with it. In our case, a random ID will be generated. So to add the ID we want we can use the below query.
POST /index_name/_doc/EMP–01
{
"name": "Test Employee",
"phones": [
{
"number": "1234567890",
"lineType": "Mobile"
},
{
"number": "9876543210",
"lineType": "Landline"
}
]
}
Here EMP-01 Specifies the ID.
Now let’s see an example of how to search a document in elastic search. To search the document by ID we can use the below query:
GET /index_name/_doc/id
Replace the id with the id value. We will get the document by ID. To search the document by name we can use the below query:
GET /index_name/_search
{
"query": {
"match": {
"name": "Test Employee"
}
}
}
To search the document inside the nested field we can use the below query:
GET /index_name/_search
{
"query": {
"nested": {
"path": "phones",
"query": {
"bool": {
"must": [
{ "match": { "phones.number": "1234567890" } }
]
}
}
}
}
}
Let’s see an example of how to update the document:
POST /index_name/_update/EMP-01
{
"doc": {
"name": "Update Employee",
"phones": [
{
"number": "1111111111",
"type": "Mobile"
},
{
"number": "1234554321",
"type": "Landline"
}
]
}
}
To update specific fields only we can use the below query:
POST /index_name/_update/EMP-01
{
"doc": {
"name": "New Updated Employee"
}
}
Let’s see an example of how to delete the documents:
DELETE /index_name/_doc/EMP-01
This query will delete the document with ID EMP-01.
To delete a document by employee name we can use the below query:
POST /emp/_delete_by_query
{
"query": {
"match": {
"name": "Test Employee"
}
}
}
This query will delete the records with the name ‘Test Employee’.
To delete the document on matching the nested field value we can use the following query:
POST /index_name/_delete_by_query
{
"query": {
"nested": {
"path": "phones",
"query": {
"bool": {
"must": [
{ "match": { "phones.number": "1234567890" } }
]
}
}
}
}
}
This query will delete the documents where the phone number is ‘1234567890’.
In this blog we have learned the importance of Elasticsearch, the terminologies used in ElasticSearch, and its ability to handle large volumes of data, real-time search, and integration with Kibana. Whether it’s creating indices, adding documents, searching, updating, or deleting data, Elasticsearch provides simple yet robust functionalities that cater to diverse data management needs.
In the next blog, we will dive deeper into the advanced searching mechanism provided by Elasticsearch.
The team at Mindbowser was highly professional, patient, and collaborative throughout our engagement. They struck the right balance between offering guidance and taking direction, which made the development process smooth. Although our project wasn’t related to healthcare, we clearly benefited...
Founder, Texas Ranch Security
Mindbowser played a crucial role in helping us bring everything together into a unified, cohesive product. Their commitment to industry-standard coding practices made an enormous difference, allowing developers to seamlessly transition in and out of the project without any confusion....
CEO, MarketsAI
I'm thrilled to be partnering with Mindbowser on our journey with TravelRite. The collaboration has been exceptional, and I’m truly grateful for the dedication and expertise the team has brought to the development process. Their commitment to our mission is...
Founder & CEO, TravelRite
The Mindbowser team's professionalism consistently impressed me. Their commitment to quality shone through in every aspect of the project. They truly went the extra mile, ensuring they understood our needs perfectly and were always willing to invest the time to...
CTO, New Day Therapeutics
I collaborated with Mindbowser for several years on a complex SaaS platform project. They took over a partially completed project and successfully transformed it into a fully functional and robust platform. Throughout the entire process, the quality of their work...
President, E.B. Carlson
Mindbowser and team are professional, talented and very responsive. They got us through a challenging situation with our IOT product successfully. They will be our go to dev team going forward.
Founder, Cascada
Amazing team to work with. Very responsive and very skilled in both front and backend engineering. Looking forward to our next project together.
Co-Founder, Emerge
The team is great to work with. Very professional, on task, and efficient.
Founder, PeriopMD
I can not express enough how pleased we are with the whole team. From the first call and meeting, they took our vision and ran with it. Communication was easy and everyone was flexible to our schedule. I’m excited to...
Founder, Seeke
We had very close go live timeline and Mindbowser team got us live a month before.
CEO, BuyNow WorldWide
If you want a team of great developers, I recommend them for the next project.
Founder, Teach Reach
Mindbowser built both iOS and Android apps for Mindworks, that have stood the test of time. 5 years later they still function quite beautifully. Their team always met their objectives and I'm very happy with the end result. Thank you!
Founder, Mindworks
Mindbowser has delivered a much better quality product than our previous tech vendors. Our product is stable and passed Well Architected Framework Review from AWS.
CEO, PurpleAnt
I am happy to share that we got USD 10k in cloud credits courtesy of our friends at Mindbowser. Thank you Pravin and Ayush, this means a lot to us.
CTO, Shortlist
Mindbowser is one of the reasons that our app is successful. These guys have been a great team.
Founder & CEO, MangoMirror
Kudos for all your hard work and diligence on the Telehealth platform project. You made it possible.
CEO, ThriveHealth
Mindbowser helped us build an awesome iOS app to bring balance to people’s lives.
CEO, SMILINGMIND
They were a very responsive team! Extremely easy to communicate and work with!
Founder & CEO, TotTech
We’ve had very little-to-no hiccups at all—it’s been a really pleasurable experience.
Co-Founder, TEAM8s
Mindbowser was very helpful with explaining the development process and started quickly on the project.
Executive Director of Product Development, Innovation Lab
The greatest benefit we got from Mindbowser is the expertise. Their team has developed apps in all different industries with all types of social proofs.
Co-Founder, Vesica
Mindbowser is professional, efficient and thorough.
Consultant, XPRIZE
Very committed, they create beautiful apps and are very benevolent. They have brilliant Ideas.
Founder, S.T.A.R.S of Wellness
Mindbowser was great; they listened to us a lot and helped us hone in on the actual idea of the app. They had put together fantastic wireframes for us.
Co-Founder, Flat Earth
Ayush was responsive and paired me with the best team member possible, to complete my complex vision and project. Could not be happier.
Founder, Child Life On Call
The team from Mindbowser stayed on task, asked the right questions, and completed the required tasks in a timely fashion! Strong work team!
CEO, SDOH2Health LLC
Mindbowser was easy to work with and hit the ground running, immediately feeling like part of our team.
CEO, Stealth Startup
Mindbowser was an excellent partner in developing my fitness app. They were patient, attentive, & understood my business needs. The end product exceeded my expectations. Thrilled to share it globally.
Owner, Phalanx
Mindbowser's expertise in tech, process & mobile development made them our choice for our app. The team was dedicated to the process & delivered high-quality features on time. They also gave valuable industry advice. Highly recommend them for app development...
Co-Founder, Fox&Fork