Ответ
Имею практический опыт работы с OpenSearch (форк Elasticsearch) в нескольких проектах. Использовал его для решения следующих задач:
- Полнотекстовый поиск: реализация сложного поиска по каталогам товаров с учетом релевантности, морфологии и синонимов.
- Сбор и анализ логов: настройка конвейера для агрегации логов из различных сервисов (log aggregation) для последующего анализа и мониторинга.
- Управление кластером: настройка и администрирование кластеров OpenSearch, включая управление индексами, шаблонами (index templates) и маппингами.
- Оптимизация запросов: профилирование и ускорение медленных запросов, эффективное использование
bool
запросов, агрегаций иnested
объектов.
В Go-проектах взаимодействовал с OpenSearch через официальный клиент opensearch-go
.
Пример индексации документа:
// Создание клиента
client, err := opensearch.NewClient(opensearch.Config{
Addresses: []string{"http://localhost:9200"},
})
if err != nil {
log.Fatalf("Error creating the client: %s", err)
}
// Документ для индексации
doc := map[string]interface{}{
"title": "Example Document",
"content": "An example of using OpenSearch with Go",
}
// Маршализация в JSON
docBytes, err := json.Marshal(doc)
if err != nil {
log.Fatalf("Error marshaling document: %s", err)
}
// Запрос на индексацию
_, err = client.Index(
"my-test-index",
bytes.NewReader(docBytes),
client.Index.WithDocumentID("1"),
client.Index.WithRefresh("true"), // Для немедленного отображения в поиске
)
if err != nil {
log.Fatalf("Error indexing document: %s", err)
}
Также знаком с настройкой репликации для отказоустойчивости, управлением доступом (RBAC) и мониторингом кластера с помощью Prometheus и Grafana.