Beheer

Indexen

Resource-indexen aanzetten, gebruiken en opnieuw opbouwen.

Indexen

Met indexen vind je records snel op een veldwaarde zonder de hele resource te doorzoeken. Zo zet je gewoonlijk een slug uit een URL om naar de UUID van een record.

Indexen aanzetten

Voeg aan de .meta een lijst index toe met de namen van de velden die geïndexeerd moeten worden:

{
  "fields": {
    "title": { "name": "Title", "type": "text", "required": true },
    "title_slug": { "name": "URL slug", "type": "slug", "source": "title" }
  },
  "index": ["title_slug"]
}

Elke keer dat een record wordt geschreven (data_create / data_update), wordt de index automatisch bijgewerkt.

Hoe indexen worden opgeslagen

Voor elk geïndexeerd veld maakt Nimbly een leeg bestand op:

ext/data/<resource>/.index/<field_name>/<md5(field_value)>/<record_uuid>

Een artikel met title_slug = "my-article" en uuid = "abc123" maakt bijvoorbeeld:

ext/data/articles/.index/title_slug/1a79a4d60de6718e8e5b326e338ae533/abc123

Het bestand is leeg; dat het bestaat, is de indexregel. Doordat indexen onder .index/ staan, blijven ze gescheiden van de recordbestanden en worden ze vanzelf overgeslagen bij het doorlopen van mappen (die items met een punt aan het begin overslaan).

Met splitdir

Staat ook splitdir: true aan, dan volgen de indexmappen dezelfde splitsing in twee niveaus:

ext/data/<resource>/.index/<field_name>/<aa>/<bb>/<md5(value)>/<record_uuid>

De datalibrary regelt dit onzichtbaar: dezelfde API, of splitdir nu aan staat of niet.

Een record opzoeken op slug (patroon voor route.inc)

<?php

$parts = router_match(__FILE__);
if ($parts === false || count($parts) !== 1) return;

$slug = $parts[0];
load_library('data');
load_library('util');

$records = data_read_index('articles', 'title_slug', md5_uuid($slug));
if (empty($records)) return;

$record = reset($records);
set_variable_dot('record', $record);
router_accept();

data_read_index($resource, $index_name, $index_uuid) geeft een associatieve array uuid => record van alle records met de geïndexeerde waarde. Bij het opzoeken van een slug is dat altijd één record.

Indexen opnieuw opbouwen

Voeg je index toe aan de .meta van een bestaande resource, dan hebben de bestaande records nog geen indexregels. Bouw ze opnieuw op met:

php core/cli/nimbly.php index:rebuild
# prompts: lists all indexed resources and asks you to choose

php core/cli/nimbly.php index:rebuild articles
# direct: reindexes the 'articles' resource immediately

Het commando kun je veilig vaker draaien. reindex bestaat nog als oudere naam, maar gebruik in nieuwe documentatie en scripts index:rebuild.

index:rebuild

Bouwt de indexregels van een geïndexeerde resource opnieuw op. Gebruik dit nadat je index aan de .meta van een bestaande resource hebt toegevoegd, of nadat je records buiten de gewone API om hebt geïmporteerd.

php core/cli/nimbly.php index:rebuild             # interactive: lists indexed resources, prompts for choice
php core/cli/nimbly.php index:rebuild articles    # direct: reindex the 'articles' resource

Het commando loopt alle records van de resource langs en maakt ontbrekende indexbestanden. Je kunt het veilig vaker draaien; bestaande regels blijven onaangeroerd.

Bekijk deze pagina als Markdown