
# Dizinler

`DocStore` dizinler, koleksiyonun yanında `.storh/indexes` altında saklanır.
Bunlar tümüyle kayıtlardan türetilen sıradan dosyalardır ve istenen zaman yeniden oluşturulabilir. Akıcı biçimde veya bir
[şema](https://storh.inline0.dev/tr/docs/schema) aracılığıyla tanımlayın:

```php
$docs->indexes()
    ->field('slug')->unique()
    ->field('kind')
    ->field('publishedAt')->range()
    ->sync();
```

Dizin türleri:

- `kind` veya `status` gibi alanlar için eşitlik dizinleri: her farklı değer için bir dosya; böylece tekil aramada yalnızca eşleşen değer dosyası okunur
- `slug` gibi alanlar için benzersiz dizinler: yazma anında uygulanır; yinelenen bir değer, herhangi bir şey yazılmadan önce `put()` işlemini başarısız kılar
- Skaler değerler için aralık dizinleri: seyrek arama kontrol noktaları içeren sıralı bir dosya; `gt`, `gte`, `lt`, `lte`, `between` ve `prefix` işlemlerini sunar

Aralık dizinleri aynı alandaki `orderBy` işlemlerini de, tüm sonucu belleğe alıp sıralamadan, artan veya azalan biçimde doğrudan dizin sırasından yanıtlayabilir; bunun için bir `limit` kullanılır.

Bir sorgu, benzersiz olmayan ve eşitlik dizinli alanlarda iki `eq` koşulunu birleştirdiğinde, storh bu alan çifti için otomatik bir bileşik kova kullanabilir. Böylece başka bir dizin tanımlamaya gerek kalmadan iki alanlı seçici filtreler hızlı çalışır.

## Tutarlılık ve onarım

Yazmalar, kayıt dosyası atomik olarak değiştirildikten sonra koleksiyon yazma kilidi altında dizin girdilerini günceller; böylece kayıtlar ve dizinler birlikte ilerler.
`verify()` her dizini tam kayıt taramasıyla karşılaştırır ve tutarsızlıkları bildirir;
`reindex()` yapılandırılmış her dizini kayıt dosyalarından yeniden oluşturur; `repair()` bozuk kayıtları karantinaya alır ve ardından dizinleri yeniden oluşturur.

```php
$docs->reindex();

$plan = $docs
    ->query()
    ->where('slug')->eq('home')
    ->explain();
```

`explain()`, planlayıcı yapılandırılmış bir dizini kullanabildiğinde `index_scan`, aksi durumda `full_scan` döndürür.
