← Přehled / ai-search / configuration / retrieval
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ů:
- docs
- guide.pdf
- tutoriály
- getting-started
- intro.pdf
- getting-started
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:
$gtezahrnuje všechny cesty začínající nadocs/$lthodnotoudocs0vylučuje cesty, které nezačínají nadocs/(od0přichází po/v ASCII)