Elasticsearch'de varsayılan olarak, bir shard 30 saniye boyunca aranmazsa refresh durur. Bir sonraki arama refresh'i tetikler ve aramadan önce refresh çalışır.

Belirli bir süre sorgulamalara ara verildiğinde bu durum, Elasticsearch sorgularının ilk çalışmasının çok uzun sürmesine sebep olur. 

Bunun önüne geçilmesi için aşağıdaki iki ayar değiştirilebilir:

1) Bir shard'ın, aramanın idle olduğu kabul edilene kadar ne kadar süreyle arama alamayacağı veya istek alamayacağını belirten değeri değiştirmek.

index.search.idle.after=30sn
CODE
  • Bu değer arttırıldığında, refresh işlemi için iki sorgu arasında geçmesi gereken süre artar.
  • Bu sorunu sadece biraz daha uzun vadede olması için öteler.
  • Eğer sık sorgulanan bir sistem ise düşünülebilir.

2) Index'te yapılan son değişiklikleri arama için görünür hale getiren refresh işleminin ne sıklıkta gerçekleştirileceğini belirten değeri değiştirmek.

index.refresh_interval=1sn
CODE
  • Bu değer arttırıldığında refresh'in belirli sürelerde otomatik yapılması sağlanır.
  • Bu sorgu sonuçlarında belirli süre boyunca güncel olmayan verilerin gelebilmesine ve sistem kaynaklarının daha fazla tüketilmesine yol açar.
  • Eğer sık sorgulanma yapılmıyorsa ama sorgulama yapan uygulamanın performanslı olması gerekiyorsa ayarlanması önem arz eder.
  • Bu yenileme süresinin fine-tune edilmesi ihtiyacınıza göre değişir.

Index Ayarını Değiştirme

"elasticsearch.yml" dosyasında index bazlı ayarlar yapılamaz.

Index bazlı ayarlar ya index template kullanarak ya da index ayar api'si kullanılarak değiştirilebilir.

API Kullanımı

Aşağıda tüm indexlerde bu ayarın API kullanımı ile ayarlanması gösterilmiştir:

curl -X PUT "<ELASTICSEARCH_IP>:9200/_all/_settings?preserve_existing=true&ignore_unavailable=true" --header 'Content-Type:application/json' -d'{ "index" : {"refresh_interval" : "5s"}}'
CODE

Aşağıda sadece belirtilen indexde bu ayarın API kullanımı ile ayarlanması gösterilmiştir:

curl -X PUT "<ELASTICSEARCH_IP>:9200/apinizer-log-apiproxy-<INDEX_KEY>/_settings?preserve_existing=true&ignore_unavailable=true" --header 'Content-Type:application/json' -d'{ "index" : {"refresh_interval" : "5s"}}'
CODE

Index Template Kullanımı

Aşağıda sadece ilgili index için Index Template kullanılarak bu ayarın ayarlanması gösterilmiştir:

{
    "data_stream": {
    },
    "index_patterns": [
        "<INDEX_PATTERN_NAME>"
    ],
    "template": {
        "mappings": { ... },
        "settings": {
            "index": {
                "lifecycle": {
                    "name": "<ILM_POLICY_NAME>"
                },
                "number_of_replicas": "0",
                "number_of_shards": "1",
                "refresh_interval": "5sn"
            }
        }
    }
}
CODE