INTEGRITY Dokumentace

Filtrování

Filtrování metadat zužuje výsledky vyhledávání na základě metadat, takže se načte pouze relevantní obsah. Filtr se použije ještě před načtením, takže se dotazujete pouze na dokumenty, na kterých záleží.

Filtrování využívá atributy metadat extrahované během indexování. Chcete-li definovat vlastní atributy nebo použít vestavěné atributy metadat, přečtěte si Atributy metadat.

AI Search umí ukládat řetězcové hodnoty delší, než je filtrovatelný prefix. Filtry ale odpovídají jen prvním 64 bajtům UTF-8 u každého indexovaného řetězce. Vectorize umí ukládat pole řetězců, ale zatím je neindexuje ani nefiltruje.

Zde je příklad filtrování podle metadat pomocí Workers binding:

const instance = env.AI_SEARCH.get("my-instance");

const results = await instance.search({
	messages: [{ role: "user", content: "What is Cloudflare?" }],
	ai_search_options: {
		retrieval: {
			filters: {
				folder: "docs/getting-started/",
				timestamp: { $gte: 1735689600 },
			},
		},
	},
});

Syntaxe filtru

Filtry jsou objekty JSON, jejichž klíče představují názvy atributů metadat a hodnoty určují podmínku filtru.

Podporované operátory

Operátor Popis
$eq Rovná se
$ne Nerovná se
$in Porovná uloženou skalární hodnotu s libovolnou kandidátní skalární hodnotou
$nin Vyloučí uloženou skalární hodnotu, která odpovídá libovolné z kandidátních skalárních hodnot
$lt Less than
$lte Less than or equal to
$gt Větší než
$gte Větší nebo rovno

Implicitní $eq

Když zadáte přímou hodnotu bez operátoru, je považována za kontrolu rovnosti:

{
	"ai_search_options": {
		"retrieval": {
			"filters": { "folder": "docs/getting-started/" }
		}
	}
}

To odpovídá:

{
	"ai_search_options": {
		"retrieval": {
			"filters": { "folder": { "$eq": "docs/getting-started/" } }
		}
	}
}

Dotazy na rozsah

Kombinujte operátory horní a dolní meze a filtrujte podle rozsahů:

{
	"ai_search_options": {
		"retrieval": {
			"filters": { "timestamp": { "$gte": 1735689600, "$lt": 1735900000 } }
		}
	}
}

Více podmínek (implicitní AND)

Když zadáte více klíčů, musí být splněny všechny podmínky:

{
	"ai_search_options": {
		"retrieval": {
			"filters": {
				"folder": "docs/getting-started/",
				"timestamp": { "$gte": 1735689600 }
			}
		}
	}
}

$in operátor

Porovná uložené skalární pole s libovolnou hodnotou v kandidátním poli. $in neprohledává uvnitř uložených polí:

{
	"ai_search_options": {
		"retrieval": {
			"filters": { "folder": { "$in": ["docs/guides/", "docs/tutorials/"] } }
		}
	}
}

Filtr „Starts with“ pro složky

Pro filtrování všech souborů ve složce a jejích podsložkách použijte rozsahový dotaz.

Zvažte například tuto strukturu souborů:

Použití { "folder": "docs/" } odpovídá pouze souborům přímo v této složce (například guide.pdf), nikoli soubory v podsložkách.

Chcete-li porovnat všechny soubory začínající na docs/, použijte rozsahový dotaz:

{
	"ai_search_options": {
		"retrieval": {
			"filters": { "folder": { "$gte": "docs/", "$lt": "docs0" } }
		}
	}
}

Funguje to z tohoto důvodu: