OpenSearch’te Dinamik Mapping ile Varsayılan Davranışı Manipüle Etme
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 dekeyword
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
veseverity
: 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
vedescription
: String alanları varsayılan olarak hemtext
hem dekeyword
olarak tanımlandı.event_time
: Tarih alanı varsayılandate
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.