Vil du gi søkefunksjonen i ditt Sanity-prosjekt en skikkelig oppgradering?
Med "Embeddings Index"-pluginen kan du implementere semantisk søk som forstår intensjonen bak brukernes søk, ikke bare de eksakte ordene. Resultatet? En smartere, mer intuitiv søkeopplevelse som hjelper hjelper deg med å finne det du faktisk leter etter, både raskere og enklere.
Semantisk søk handler om å finne mening, ikke bare matche ord. I stedet for å begrense seg til eksakte tekstsøk, bruker denne teknologien kunstig intelligens og vektorrepresentasjoner (embeddings) til å forstå relasjoner mellom ord og konsepter. Dette betyr at selv om en bruker formulerer et spørsmål eller søker etter noe med litt andre ord enn det som finnes i databasen, kan systemet fortsatt finne relevante resultater.
Hvordan komme i gang?
Siden Embeddings Index er en plugin I Sanity, trenger du først å legge det til i sanity-configen. Det kan gjøres med koden under. Den første plugin-en aktiverer semantisk søk ved bruk av Embeddings Index, og andre plugin legger den til i Sanity Studio.
import { embeddingsIndexDashboard, embeddingsIndexReferenceInput } from '@sanity/embeddings-index-ui';
export default defineConfig({
...,
plugins: [
embeddingsIndexReferenceInput(),
embeddingsIndexDashboard(),
],
});
I sanity studio vil du nå få en fane som heter embeddings. Her inne kan du begynne å lage en embedding for all dataen du har. Du må lage et navn på embeddingen, et filter for hvilke type data du har lyst til å hente ut, samt projeksjonen. Du kan hente ut all data ved "...", men det å definere en projeksjon som kun henter relevant data fra dokumentet kan være gunstig. Grunnen til dette er at embeddings fungerer best når de fokuserer på den viktigste informasjonen for konteksten du ønsker å optimalisere søket for. Ved å begrense dataen til kun relevante felt, reduserer du støy og gjør modellen mer presis i å forstå meningen bak innholdet. Når du har definert din embedding kan du trykke på "Create Index", og da vil det ta noen minutter før embeddingen er klar.
Hente ut informasjon fra embedding
Når embeddingen etter hvert er klar, må du gjøre to ting. Det ene er å lage et token med lesetilgang, og det andre er å skrive et query for å hente ut resultatene fra embeddingen.
Tokenet kan du legge til i sanity-prosjektet under API-fanen. Her vil du nederst finne muligheten til å legge til et token. Husk å ta vare på secreten!
I kodesnutten under kan du selv legge inn prosjekt-id, navnet på datasettet, navnet på embeddingen du lagde nå nettopp og tokenet du nettopp lagde. Når det er gjort kan du hente ut søkeresulteter i embeddingen basert på et gitt "query". Da vil du få ut resultatene som har høyest semantisk likhet med søkeordet, der hvert resultat scores fra 0 til 1. Ikke verre enn det!
const response = await fetch(
`https://${projectId}.api.sanity.io/vX/embeddings-index/query/${datasetName}/${embeddingName}`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({
query: query,
maxResults: 100,
filter: {},
}),
},
);
Hvor bra funker egentlig dette?
På norsk fungerer semantisk søk ganske bra, og mange vil oppleve en betydelig forbedring i søkefunksjonaliteten sammenlignet med vanlige tekstsøk. Likevel er det verdt å merke seg at søket fungerer enda bedre på engelsk, noe som trolig skyldes overvekten av engelsk i treningsdataen til modellen. Selv om det ikke fungerer like optimalt som på engelsk, har jeg selv opplevd at den er overraskende god til å finne sammenhenger mellom ord som ikke nødvendigvis er direkte koblet i teksten, men som likevel har en logisk eller semantisk relasjon. Dette gjør søket langt mer intuitivt og nyttig, selv på norsk. Er du klar for å ta søket til neste nivå? Da er dette verktøyet absolutt verdt å utforske!