Zoeken via de API
Als aanvulling op de CRUD-endpoints voor Documenten zijn er binnen onze JSON:API ook search-endpoints beschikbaar. Met deze endpoints kun je semantisch zoeken binnen je kennisbank en de resultaten verder verfijnen met filters, facets, sortering en paginering.
Deze search-endpoints zijn bedoeld voor situaties waarin het niet genoeg is om een document op ID op te halen, maar waarbij je relevante documenten of documentfragmenten wilt terugvinden op basis van een zoekvraag.
Authenticatie
Om HTTP-verzoeken naar ons systeem te authoriseren gebruiken we een zogeheten long lived Bearer token.
Voorbeeld van Authorization-header met een Bearer-token:
De endpoints zijn per klant beschikbaar onder een eigen sub-domein, bijvoorbeeld:
De API verwacht bij elke request de volgende headers:
Search-endpoints
Er zijn twee search-endpoints beschikbaar:
1. Zoeken in documenten
Dit endpoint geeft zoekresultaten terug op documentniveau. Ieder resultaat verwijst naar een document uit de kennisbank.
2. Zoeken in documentfragmenten
Dit endpoint geeft zoekresultaten terug op chunkniveau. Een chunk is een fragment van een document. Dit endpoint is bruikbaar wanneer je fijnmaziger zoekresultaten wilt ontvangen dan op volledig documentniveau.
Hoewel de bron verschilt, hebben beide endpoints dezelfde request- en response-structuur.
Algemene request-parameters
De volgende queryparameters worden ondersteund:
query
Type: string
Optioneel
De natuurlijke zoekvraag of zoekterm waarop semantisch gezocht wordt.
Voorbeeld:
maxDistance
Type: number
Optioneel
Waarde: tussen 0 en 1
Hiermee beperk je de maximale semantische afstand van resultaten. Een lagere waarde maakt de zoekopdracht strenger.
Voorbeeld:
page[offset]
Type: integer
Optioneel
Standaard: 0
Het aantal resultaten dat moet worden overgeslagen.
page[limit]
Type: integer
Optioneel
Standaard: door het platform bepaald
Het maximale aantal resultaten dat moet worden teruggegeven.
Voorbeeld:
sort
Type: string
Optioneel
Sorteervelden worden komma-gescheiden opgegeven. Gebruik:
veldnaamvoor oplopende sortering-veldnaamvoor aflopende sortering+veldnaamexpliciet voor oplopende sortering
Voorbeeld:
Welke sorteerbare velden beschikbaar zijn hangt af van de velden die voor de kennisbank zijn ingericht.
fields[...]
Type: sparse fieldset
Optioneel
Hiermee kun je het aantal responsevelden beperken.
Voor documents/search gebruik je bijvoorbeeld:
Voor document-chunks/search gebruik je bijvoorbeeld:
Je kunt ook direct het interne resource type gebruiken:
Let op: de response gebruikt intern het resource type semantic-searchables, maar de API accepteert voor deze endpoints ook de aliassen documents en document-chunks in fields[...].
Filters
Met filter kun je zoekresultaten beperken tot documenten of chunks die voldoen aan extra voorwaarden.
De filters worden als array van objecten meegegeven. Iedere filterregel ondersteunt onder andere:
path: de naam van het veld waarop je wilt filterenvalue: de gezochte waardeoperator: de vergelijkingsoperatorid: optioneel, voor gegroepeerde filtersparent: optioneel, om filters aan een groep te koppelentagoftags: optioneel, om filters te labelen
Beschikbare filteroperators:
=!=>>=<<=LIKEINALLNOT INIS NULL
Voor filtergroepen zijn de boolean-operators beschikbaar:
ANDOR
Welke path-waarden kun je gebruiken?
De beschikbare filtervelden hangen af van de inrichting van de kennisbank van de klant. In de praktijk gaat het om:
metadata-velden uit
meta_dataknowledge scope-velden
systeemvelden, zoals
source
Let op:
metadata-sleutels worden intern opgeslagen in
snake_caseeen metadata-veld zoals
publishDatewordt daardoor bijvoorbeeldpublish_date
Eenvoudig filtervoorbeeld
Zoek alleen binnen documenten waarvan de metadata author gelijk is aan SWIS:
Filtervoorbeeld met lijstwaarden
Zoek binnen documenten die in een van meerdere categorieen vallen:
Filtervoorbeeld met groepen
Zoek op documenten waarbij:
source = websiteEN (
category = faqOFcategory = handleiding)
Facets
Met facets kun je aggregaties laten teruggeven naast de zoekresultaten. Dit is nuttig voor filters in een zoekinterface, zoals aantallen per categorie, auteur of bron.
Iedere facetregel ondersteunt:
path: het veld waarop gegroepeerd moet wordenlimit: maximaal aantal bucketsmin_count: minimaal aantal resultaten per bucketoperator:ANDofORexclude_tags: optioneel, om filters met dezelfde tags uit te sluiten bij facetberekening
Voorbeeld:
In de response worden facetresultaten opgenomen onder meta.facets.
Voorbeeld request
Onderstaand voorbeeld zoekt semantisch in documenten, beperkt de resultaten tot bron website, vraagt facets op voor category en sorteert aflopend op date.
Voorbeeld response
De search-endpoints geven resultaten terug als JSON:API-collectie met resource type semantic-searchables.
Betekenis van responsevelden
summary
Bij documents/search bevat dit veld een samenvatting of representatieve inhoud van het document.
Bij document-chunks/search bevat dit veld de inhoud van het specifieke documentfragment dat als resultaat is gevonden.
relevance_score
Een score die aangeeft hoe relevant het resultaat is voor de zoekopdracht.
distance
De semantische afstand tussen query en resultaat. Lager is doorgaans beter.
metadata_fields
De metadata die bij het document hoort, voor zover beschikbaar.
knowledge_scopes
De knowledge scopes die aan het document gekoppeld zijn, voor zover beschikbaar.
Praktische aandachtspunten
Gebruik
documents/searchwanneer je resultaten op documentniveau wilt tonen.Gebruik
document-chunks/searchwanneer je direct het meest relevante tekstfragment wilt tonen.Houd rekening met
snake_casebij metadata-velden in filters en facets.Niet ieder zichtbaar responseveld is automatisch filterbaar of sorteerbaar.
Welke filter-, facet- en sorteervelden beschikbaar zijn, hangt af van de inrichting van de kennisbank van de betreffende klant.
Support
Aan de hand van bovenstaande informatie en voorbeelden zou je geen problemen moeten ondervinden om een verbinding op te zetten met onze API search-endpoints. Als je nog vragen hebt, neem dan contact op met ons supportteam via info@vragen.ai.
