OpenSearch’te Dinamik Mapping ile Varsayılan Davranışı Manipüle Etme

Mustafa Dikyar
3 min readMar 3, 2025

--

Herkese selam, OpenSearch’te veri modelleme yaparken, dinamik mapping özelliği, index oluşturma sırasında veya sonrasında alanların otomatik olarak tanımlanmasını sağlar.

Varsayılan olarak, OpenSearch farklı veri tiplerini (string, sayısal, tarih, boolean vb.) belirli kurallara göre tanımlar. Ancak, dinamik template’ler kullanarak bu varsayılan davranışı manipüle edebilir ve alanları ihtiyaçlarınıza göre özelleştirebilirsiniz.

1. Dinamik Mapping ve Varsayılan Davranış

OpenSearch, bir document eklerken yaklaşıma göre alanları otomatik olarak tanımlayacaktır. Varsayılan davranış şu şekildedir:

  • String alanları: Hem text hem de keyword olarak tanımlanır.
  • Sayısal alanlar: long, integer, double gibi uygun türlerde tanımlanır.
  • Tarih alanları: date olarak tanımlanır.
  • Boolean alanlar: boolean olarak tanımlanır.

Dinamik template’ler kullanarak bu varsayılan davranışı değiştirebilir ve alanları ihtiyaçlarınıza göre özelleştirebilirsiniz. Örneğin:

  • String alanlarını sadece keyword olarak tanımlayabilirsiniz.
  • Tarih alanlarını özel bir formatla tanımlayabilirsiniz.

2. Dinamik Template ile Varsayılan Davranışı Manipüle Etme

Aşağıdaki örnekte, logs-* pattern’ına sahip index’lerdeki alanları manipüle eden bir dinamik template oluşturuyoruz:

PUT _index_template/logs_template
{
"index_patterns": ["logs-*"], // Bu template'in uygulanacağı index pattern
"template": {
"mappings": {
"dynamic_templates": [
{
"strings_as_keywords": { // String alanları için template
"match_mapping_type": "string", // Sadece string türündeki alanları hedefle
"mapping": {
"type": "keyword" // String alanlarını keyword olarak tanımla
}
}
},
{
"dates_as_custom_format": { // Tarih alanları için template
"match_mapping_type": "date", // Tarih türündeki alanları hedefle
"mapping": {
"type": "date",
"format": "yyyy-MM-dd||epoch_millis" // Özel tarih formatı
}
}
}
]
}
}
}
  • index_patterns: ["logs-*"]: Bu template, logs- ile başlayan tüm index’lere uygulanacaktır.
  • strings_as_keywords: String alanlarını keyword olarak tanımlar.
  • dates_as_custom_format: Tarih alanlarını özel bir formatla (yyyy-MM-dd veya epoch milisaniye) tanımlar.

3. Pattern’a Uyan Index’e Veri Yazma

Template oluşturulduktan sonra, logs- pattern’ına uyan bir index oluşturup veri yazalım:

Index Oluşturma:

PUT /logs-2025.03.03

Veri Yazma:

POST /logs-2025.03.03/_doc/1
{
"message": "Mustafa was here!",
"severity": "high",
"timestamp": "2024-10-01"
}

Mapping’i Kontrol Etme:

GET /logs-2025.03.03/_mapping

Çıktı:

{
"logs-2025.03.03": {
"mappings": {
"dynamic_templates": [
{
"strings_as_keywords": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
},
{
"dates_as_custom_format": {
"match_mapping_type": "date",
"mapping": {
"format": "yyyy-MM-dd||epoch_millis",
"type": "date"
}
}
}
],
"properties": {
"message": {
"type": "keyword"
},
"severity": {
"type": "keyword"
},
"timestamp": {
"type": "date",
"format": "yyyy-MM-dd||epoch_millis"
}
}
}
}
}
  • message ve severity: String alanları keyword olarak tanımlandı.
  • timestamp: Tarih alanı özel formatla (yyyy-MM-dd) tanımlandı.

4. Pattern’a Uymayan Index’e Veri Yazma

Template’in etkisini görmek için logs- pattern’ına uymayan bir index oluşturup veri yazalım:

Index Oluşturma:

PUT /events-2025.03.03

Veri Yazma:

POST /events-2025.03.03/_doc/1
{
"event_name": "User Login",
"description": "A user logged into the system",
"event_time": "2023-10-01"
}

Mapping’i Kontrol Etme:

GET /events-2023/_mapping

Çıktı:

{
"events-2025.03.03": {
"mappings": {
"properties": {
"description": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"event_name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"event_time": {
"type": "date"
}
}
}
}
}
  • event_name ve description: String alanları varsayılan olarak hem text hem de keyword olarak tanımlandı.
  • event_time: Tarih alanı varsayılan date formatında tanımlandı.

6. Sonuç

OpenSearch’te dinamik template’ler kullanarak varsayılan davranışı manipüle edebilir ve alanları ihtiyaçlarınıza göre özelleştirebiliriz.

Bu örnekte, logs-* pattern’ına sahip index’lerdeki string ve tarih alanlarını özelleştirdik ve bu template’in etkisini pattern’a uyan ve uymayan index’ler üzerinde inceledik.

  • Pattern’a Uyan Index’ler: Alanlar özelleştirilmiş tiplerle tanımlandı.
  • Pattern’a Uymayan Index’ler: Alanlar varsayılan tiplerle tanımlandı.

Dinamik template’ler, özellikle büyük ölçekli sistemlerde ve otomatik index oluşturma senaryolarında oldukça kullanışlıdır.

Ancak, template’lerin doğru yapılandırıldığından emin olmak için düzenli takip etmeyi unutmayın :)

Sevgiler.

Daha fazla detay için resmi dokümanları takip edebilirsiniz.

--

--

No responses yet