Drupal-module
Met deze Drupal-module synchroniseer je de content van je Drupal-site naar je vragen.ai-omgeving. Dat is waar de module vooral voor is: je content staat zo automatisch klaar in vragen.ai en wordt bijgewerkt zodra er iets op je site verandert, zonder dat je die apart hoeft aan te leveren.
Daarnaast kun je vragen.ai als zoekbackend achter de Search API-module zetten. Je vervangt de standaardzoekfunctie van je site dan door semantisch zoeken, met ondersteuning voor facetten, filters en "vergelijkbare content" (more like this).
Wat je nodig hebt
-
Drupal 10.1, 11 of 12
-
Toegang tot een vragen.ai-omgeving, met het API-endpoint van jouw organisatie en een bearer-token (beide vind je in je vragen.ai-omgeving)
Installatiestappen
-
Installeer de module.
# Installeer de officiële module vanaf drupal.org composer require drupal/search_api_vragen_ai # Zet de module aan drush pm:enable search_api_vragen_ai -
Maak een nieuwe Search API-server aan met de backend Vragen.ai (via Beheer → Configuratie → Zoeken en metadata → Search API). De koppeling met je vragen.ai-omgeving stel je meteen op deze server in. Er is geen aparte instellingenpagina meer; alles zit in het serverformulier:
-
API Endpoint en API Bearer Token: het endpoint en token uit je vragen.ai-omgeving. Het endpoint heeft de vorm
https://[account].vragen.ai/api/v1. -
Search System: zodra endpoint en token kloppen, laadt de module de beschikbare zoeksystemen uit je omgeving. Kies het zoeksysteem dat vragen.ai bij het zoeken gebruikt, of laat het leeg om zonder specifiek systeem te zoeken.
-
Language fallback: aan laten staan als je wilt dat een resultaat in de standaardtaal van de site wordt getoond wanneer het niet in de gevraagde taal bestaat (zie Meertalige content).
-
-
Maak een nieuwe index aan voor deze server en pas de volgende instellingen aan:
-
Databronnen → “Inhoud” (en “Media” als je ook PDF's wilt indexeren, zie PDF's en documenten indexeren).
-
Bundels voor Inhoud → de inhoudstypen die je geïndexeerd wilt hebben.
-
Talen → alle talen die je wilt doorzoeken. Meerdere talen mag; de module gaat daar netjes mee om (zie Meertalige content).
-
Index items immediately: “uit”. (Je kunt dit ook aan laten staan, maar dan stuurt Drupal bij elke wijziging direct een HTTP-request naar vragen.ai in plaats van dit via cron af te handelen.)
-
-
Configureer de velden.
We adviseren de items te renderen naar HTML. Zo houdt vragen.ai rekening met de semantiek van de HTML-markup. Je kunt een weergave configureren waarin je alleen de velden rendert die je ook daadwerkelijk wilt laten indexeren.
De module stuurt je content op twee manieren naar vragen.ai:
-
Semantische content: de inhoudelijke velden worden samengevoegd tot één HTML-document. Dit is de tekst waarop semantisch wordt gezocht en waaruit de AI een antwoord opbouwt. Je kunt hier niet op filteren en er geen facetten op maken.
-
Metadata: elk geïndexeerd veld (behalve bijlagen) gaat daarnaast als apart metadata-veld mee, onder zijn eigen machinenaam. Metadata gebruik je om op te filteren, om facetten te maken en om extra gegevens in de zoekresultaten te tonen (zie Filteren en facetten).
Standaard gaat elk geschikt veld allebei die kanten op: het wordt als semantische content gerenderd én als metadata meegestuurd. Wil je zelf bepalen welke velden de zoekbare tekst vormen, zet dan de processor Vragen.ai semantic content aan (bij Processors van de index) en vink de velden aan die content moeten worden. Zo houd je bijvoorbeeld auteur en publicatiedatum beschikbaar als filter of facet, zonder dat ze de zoektekst vervuilen.
Naast je eigen velden voegt de module een paar metadata-velden toe die het zelf uit de content haalt: de auteur, de aanmaakdatum (
date), het entiteitstype en de bundle, en de talen waarin de content bestaat (languages). -
-
Laat de volledige website éénmalig indexeren om de index op te bouwen.
PDF's en documenten indexeren
Wil je naast content ook PDF-documenten laten indexeren, dan kan dat op twee manieren:
-
Via de databron “Media”. Zet bij databronnen ook "Media" aan en selecteer bij de instellingen van die databron de bundle die de PDF's bevat. vragen.ai leest de documenten dan als losse items in.
-
Als bijlage bij content. Voeg aan je index een veld toe van het type Vragen.ai attachment en zet de processor Vragen.ai attachment files aan. De module loopt dan de bestands- en referentievelden van je content na (ook onderliggende paragraphs en gerefereerde entiteiten) en koppelt de gevonden bestanden als bijlage aan het document. Zo blijft een PDF gekoppeld aan de pagina waar hij bij hoort, in plaats van als losstaand document in de index te komen.
Meertalige content
vragen.ai en de module zijn volledig meertalig. Je mag dus gerust meerdere talen aanzetten bij de index. Per stuk content wordt één document bijgehouden; de vertalingen worden aan dat document gekoppeld, zodat er geen dubbele content in de index ontstaat.
-
Bij het zoeken filtert de module op de taal van de bezoeker.
-
Staat Language fallback aan (de standaard), dan krijgt de bezoeker het resultaat in de standaardtaal van de site te zien als de gevraagde taal ontbreekt. Zet je het uit, dan toont de module alleen resultaten die echt in de gevraagde taal bestaan.
Op de oude versie van de module kon je maar één taal indexeren. Dat is niet meer nodig: indexeer voortaan alle talen die je wilt doorzoeken.
Zoekresultaten aanpassen
De backend kent een paar optionele instellingen om de zoekresultaten bij te sturen. Je vindt ze op de serverconfiguratie; laat ze leeg voor de standaardwaarden van vragen.ai.
-
Alpha (0–1): bepaalt de balans bij hybride zoeken. 1 is volledig semantisch, 0 volledig op trefwoorden.
-
Max distance en Distance (0–1): filteren resultaten weg waarvan de semantische afstand te groot is. Lager is strenger. Distance geldt voor "vergelijkbare content"-zoekopdrachten (more like this), max distance voor gewone zoekopdrachten.
Werk je met Views, dan kun je deze drie waarden ook per view instellen (onder de sectie Vragen.ai → Query settings in de view). Zo kan bijvoorbeeld een "gerelateerde artikelen"-view een andere afstelling krijgen dan de hoofdzoekpagina.
De module ondersteunt ook "vergelijkbare content" (more like this), zodat je met de Search API gerelateerde items kunt tonen.
Filteren en facetten
Filteren en facetten werken alleen op metadata. De semantische content (de gerenderde HTML uit stap 4) is er uitsluitend voor het semantisch zoeken en voor het AI-antwoord. Daar kun je niet op filteren en er geen facetten op maken.
Wil je op een veld kunnen filteren of er een facet van maken, dan moet dat veld dus als metadata meegaan. Dat gebeurt automatisch voor elk geïndexeerd veld (zie stap 4): in de praktijk voeg je het veld gewoon toe aan de index en is het meteen beschikbaar. Facetten zet je vervolgens op met de Facets-module; ook de OF-operator wordt ondersteund. Zo krijg je bijvoorbeeld het languages-veld automatisch, en daarop filtert de module op meertalige sites zelf al voor.
Let op: elk veld dat je indexeert gaat als metadata mee, ook de velden die als semantische content worden gerenderd. Een lang tekstveld zoals de body staat dan dubbel in het document: verwerkt in de content, en als ruwe waarde in de metadata. Filteren op zo'n lang veld heeft zelden zin. Gebruik voor filters en facetten daarom liefst korte, afgebakende velden, zoals categorie, type of datum.
Caching van zoekresultaten
Zoekresultaten en "vergelijkbare content"-resultaten worden in de cache van Drupal bewaard, zodat dezelfde zoekopdracht niet bij elke paginaweergave opnieuw naar vragen.ai wordt gestuurd. De bewaartijd staat standaard op één uur en is in te stellen via de sleutel search_cache_ttl in de backendconfiguratie (er is geen scherm voor; pas het aan via geëxporteerde config of een recipe). Let op: de cache vervalt alleen op tijd. Het indexeren of verwijderen van items leegt de cache niet, dus een wijziging is pas na afloop van de bewaartijd zichtbaar in de zoekresultaten. Verandert je content vaak en telt versheid, zet de bewaartijd dan lager.
Vragen.ai embedden
De module regelt het indexeren en het semantisch zoeken. Wil je bezoekers ook rechtstreeks vragen laten stellen, dan plaats je daarnaast de widget met de embed-code uit De widget op je website. In Drupal zet je die code bijvoorbeeld in een aangepast blok (met een tekstformaat dat scripts toestaat, zoals "Full HTML") of direct in een Twig-template van je thema. Daar vind je ook hoe je de widget in je huisstijl stylet en meeneemt in je Content Security Policy.
Voor ontwikkelaars: documenten aanpassen
Wil je vlak voordat een document naar vragen.ai gaat nog iets aanpassen, of bepaalde items overslaan, dan is er een event PostCreateIndexDocumentEvent. Een event subscriber krijgt daarin het Search API-item, het opgebouwde document en de index. Via shouldIndex(FALSE) sla je een item over (een bestaand document wordt dan uit de index verwijderd), en het document zelf kun je aanvullen of aanpassen.
Veelgestelde vragen
Ik heb veel aangepast aan mijn website, kan ik in 1x mijn index verwijderen?
We hebben het support voor het volledig leeggooien van de index uitgeschakeld. We zagen dat dit vaak per ongeluk werd uitgevoerd, en het opnieuw opbouwen van alle vectoren is een intensief proces. Neem contact met ons op als dit toch wenselijk is.
Support
Kom je er niet uit? Mail ons supportteam via service@vragen.ai.