
# Indexek

A `DocStore` indexek a gyűjtemény mellett, a `.storh/indexes` alatt találhatók. Közönséges fájlok, amelyek teljes egészében a rekordokból származnak, és bármikor újraépíthetők. Láncolt hívásokkal vagy [sémán](https://storh.inline0.dev/hu/docs/schema) keresztül deklarálhatók:

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

Indexfajták:

- egyenlőségi indexek olyan mezőkhöz, mint a `kind` vagy a `status`: külön fájl minden egyedi értékhez, így a közvetlen keresés csak az egyező érték fájlját olvassa be
- egyedi indexek olyan mezőkhöz, mint a `slug`: az íráskor érvényesülnek, és ha egy érték duplikált, a `put()` még az írás előtt meghiúsul
- tartományindexek skalárértékekhez: rendezett fájl ritka keresési ellenőrzőpontokkal, amely a következőket szolgálja ki: `gt`, `gte`, `lt`, `lte`, `between` és `prefix`

A tartományindexek ugyanazon a mezőn a `orderBy` műveletet is kiszolgálják `limit` segítségével, közvetlenül az index sorrendjéből, növekvő vagy csökkenő irányban, a teljes eredmény előállítása és rendezése nélkül.

Ha egy lekérdezés két `eq` feltételt kombinál nem egyedi, egyenlőségi indexelt mezőkön, a storh automatikus összetett gyűjtőt használhat az adott mezőpárhoz. Ez gyorsan tartja a szelektív, kétmezős szűréseket anélkül, hogy újabb indexet kellene deklarálni.

## Konzisztencia és javítás

Az írások a rekordfájl atomi cseréje után, a gyűjtemény írási zárolása alatt frissítik az indexbejegyzéseket, így a rekordok és az indexek együtt változnak. A `verify()` teljes rekordbejárással összevet minden indexet, és jelzi az eltéréseket; a `reindex()` újraépíti az összes konfigurált indexet a rekordfájlokból; a `repair()` karanténba helyezi a sérült rekordokat, majd újraépít.

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

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

A `explain()` a `index_scan` értéket adja vissza, ha a tervező használhat konfigurált indexet, egyébként pedig a `full_scan` értéket.
