search-microservice
v0.3.1
Published
search microservice
Maintainers
Readme

Search Microservice
The Search Microservice provides a RESTful API for managing and searching text data, with built-in support for synonyms. It features endpoints for configuring settings, and for adding, updating, deleting, and searching text data.
The search functionality is powered by Elasticsearch, utilizing both fuzzy matching and synonym matching to deliver highly relevant and comprehensive search results. This enables flexible and intelligent search queries.
Example Usage
Adding Synonyms
# Add synonyms 'title, subject' for the 'news' index
curl -X POST http://localhost:3000/news/synonyms \
-H 'Content-Type: application/json' \
-d '{ "synonyms": ["title, subject"] }'Adding Text Data
# Add new text data to the 'news' index
curl -X POST http://localhost:3000/news \
-H 'Content-Type: application/json' \
-d '{ "id": 1, "text": ["News title", "News detailed content"] }'Performing a Search
# Search for 'subject' in the 'news' index
curl -X GET http://localhost:3000/news?search=subjectSearch Result
[
{
"_index": "news",
"_type": "_doc",
"_id": "1",
"_score": 0.2876821,
"_source": {
"text": [
"News title",
"News detailed content"
]
},
"highlight": {
"text": [
"News **title**"
]
}
}
]Example Searches
Here are some examples that demonstrate the power of fuzzy matching and synonym support:
- Searching for
textwill matchtext. - Searching for
Txtwill matchtext. - Searching for
Tuxtwill matchtext. - Searching for
automobilewill matchcar, provided the synonym"automobile, car"has been configured.
Installation
To install and run the microservice:
git clone https://github.com/ivanoff/search-microservice.git
cd search-microserviceInitialize Data Folder
./init.shStart the Server:
docker compose up -dAPI Endpoints
Set Synonyms
POST /:index/synonyms
Sets synonyms for the specified index.
Request Body
{
"synonyms": [
"word1, synonym word1, synonym word1",
"word2, synonym word2, synonym word2"
]
}Example Request
curl -X POST http://localhost:3000/news/synonyms \
-H 'Content-Type: application/json' \
-d '{
"synonyms": [
"word1, synonym word1, synonym word1",
"word2, synonym word2, synonym word2"
]
}'Get Synonyms
GET /:index/synonyms
Retrieves the synonym configuration for the specified index.
Example Request
curl -X GET http://localhost:3000/news/synonymsAdd Text Data
POST /:index
Adds new text data to the specified index.
Request Body
{
"id": ":indexId",
"text": ["text data", "additional text data"]
}Example Request
curl -X POST http://localhost:3000/news \
-H 'Content-Type: application/json' \
-d '{
"id": 1,
"text": ["text data", "additional text data"]
}'Update Text Data
PUT /:index/:indexId
Updates the existing text data in the specified index.
Request Body
{
"text": ["updated text data", "more updated text data"]
}Example Request
curl -X PUT http://localhost:3000/news/1 \
-H 'Content-Type: application/json' \
-d '{
"text": ["updated text data", "more updated text data"]
}'Delete Text Data
DELETE /:index/:indexId
Deletes text data from the specified index.
Example Request
curl -X DELETE http://localhost:3000/news/1Search
GET /:index?search=word&page=1&size=10
Performs a search on the specified index with pagination support.
Example Request
curl -X GET http://localhost:3000/news?search=word&page=1&size=10Possible Errors
TOO_MANY_REQUESTS/12/disk usage exceeded
If you encounter an error like:
ResponseError: cluster_block_exception
Root causes:
cluster_block_exception: index [news] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];Solution:
You can resolve this issue by updating the Elasticsearch cluster settings:
curl -X PUT "http://localhost:9200/_cluster/settings" \
-H 'Content-Type: application/json' \
-d '{
"persistent": {
"cluster.routing.allocation.disk.watermark.low": "97%",
"cluster.routing.allocation.disk.watermark.high": "98%",
"cluster.routing.allocation.disk.watermark.flood_stage": "99%"
}
}'