Edurep:Jsonsearch: verschil tussen versies

Uit Kennisnet Developers Documentatie
Naar navigatie springen Naar zoeken springen
(create stub)
 
(add interface eigenschappen transclude)
 
(26 tussenliggende versies door 2 gebruikers niet weergegeven)
Regel 1: Regel 1:
{{Info|Onderdeel van de nieuwe release}}
 
 
 
Met het jsonsearch endpoint worden Edurep responses in JSON format geleverd.
 
Met het jsonsearch endpoint worden Edurep responses in JSON format geleverd.
   
 
== Endpoints ==
 
== Endpoints ==
  +
* productie: <nowiki>https://wszoeken.edurep.kennisnet.nl/jsonsearch</nowiki>
* TODO url
 
  +
* staging: <nowiki>https://staging.edurep.kennisnet.nl/jsonsearch</nowiki>
  +
  +
== Request ==
  +
{| class="wikitable
  +
|-
  +
! argument
  +
! #
  +
! omschrijving
  +
|-
  +
| query
  +
| 1
  +
| CQL zoekopdracht
  +
|-
  +
| page-size
  +
| 0-1
  +
| aantal resultaten per pagina, max 100
  +
|-
  +
| page
  +
| 0-1
  +
| pagina van resultatenset
  +
|-
  +
| facet
  +
| 0-*
  +
| veld om drilldown op uit te voeren
  +
|-
  +
| recordSchema
  +
| 0-1
  +
| specificeer recordSchema (default jsonld)
  +
|-
  +
|}
  +
  +
=== Query ===
  +
{{:Edurep:Zoekopdracht/Query}}
  +
=== Paginering ===
  +
{{:Edurep:Zoekopdracht/Paginering}}
  +
{{:Edurep:Zoekopdracht/Paginering/Jsonsearch}}
  +
=== Drilldown ===
  +
{{:Edurep:Zoekopdracht/Drilldown}}
  +
{{:Edurep:Zoekopdracht/Drilldown/Jsonsearch}}
  +
=== Sortering ===
  +
{{:Edurep:Zoekopdracht/Sortering}}
  +
{{:Edurep:Zoekopdracht/Sortering/Jsonsearch}}
  +
=== recordSchema ===
  +
{{:Edurep:Zoekopdracht/recordSchema}}
  +
{{:Edurep:Zoekopdracht/recordSchema/Jsonsearch}}
  +
  +
== Response ==
  +
{| class="wikitable"
  +
|-
  +
! veld
  +
! #
  +
! beschrijving
  +
|-
  +
| /response
  +
| 1
  +
| response containter
  +
|-
  +
| /response/total
  +
| 1
  +
| aantal records van totale respons
  +
|-
  +
| /response/items
  +
| 0-1
  +
| lijst met response records
  +
|-
  +
| /response/facets
  +
| 1
  +
| facets container
  +
|-
  +
| /response/facets/<facetid>
  +
| 0-*
  +
| voor elke opgevraagde valide facet een container met de facet waarden
  +
|-
  +
| /response/facets/<facetid>/count
  +
| 1
  +
| aantal keer dat facet waarde voorkomt in resultatenset
  +
|-
  +
| /response/facets/<facetid>/link
  +
| 1
  +
| directe link naar query op facet waarde
  +
|-
  +
| /response/facets/<facetid>/link
  +
| 1
  +
| de individuele facet waarde
  +
|-
  +
| /response/next
  +
| 0-1
  +
| container met informatie over volgende pagina
  +
|-
  +
| /response/next/link
  +
| 1
  +
| directe link naar volgende pagina
  +
|-
  +
| /response/next/page
  +
| 1
  +
| nummer van volgende pagina
  +
|-
  +
| /response/previous
  +
| 0-1
  +
| container met informatie over vorige pagina
  +
|-
  +
| /response/previous/link
  +
| 1
  +
| directe link naar vorige pagina
  +
|-
  +
| /response/previous/page
  +
| 1
  +
| nummer van vorige pagina
  +
|-
  +
| /response/querytimes
  +
| 1
  +
| querytimes container
  +
|-
  +
| /request
  +
| 1
  +
| request container
  +
|-
  +
| /request/query
  +
| 1
  +
| gestelde query
  +
|-
  +
| /request/page-size
  +
| 0-1
  +
| gevraagd aantal resultaten per pagina
  +
|-
  +
| /request/page
  +
| 0-1
  +
| gevraagde paginanummer
  +
|-
  +
| /request/facet
  +
| 0-1
  +
| container met opgevraagde facets
  +
|-
  +
| /request/facet/index
  +
| 1
  +
| individuele gevraagde facet waarde
  +
|-
  +
| /request/facet/max-terms
  +
| 1
  +
| opgevraagde maximum aantal waarden voor facet waarde
  +
|-
  +
| /version
  +
| 1
  +
| api versie
  +
|}
   
  +
'''voorbeeld'''
== request ==
 
  +
<syntaxhighlight lang="json">
* request parameters
 
  +
{
* voorbeeld
 
  +
"response": {
  +
"total": 763,
  +
"items": [
  +
{}, {}
  +
],
  +
"facets": {
  +
"example:facet1": [
  +
{
  +
"count": 212,
  +
"link": "/jsonsearch?facet=schema%3Alicense&facet=dcterms%3Apublisher%3A40&facet-filter=example%facet1%3Dvalue1&page-size=1&query=fiets",
  +
"value": "value1"
  +
}
  +
],
  +
"example:facet2": [
  +
{
  +
"count": 213,
  +
"link": "/jsonsearch?facet=schema%3Alicense&facet=dcterms%3Apublisher%3A40&facet-filter=example%3Afacet2%3DvalueX&page-size=1&query=fiets",
  +
"value": "valueX"
  +
}
  +
]
  +
},
  +
"querytimes": {
  +
"handlingTime": 0.328,
  +
"indexTime": 0.015,
  +
"queryTime": 0.021
  +
},
  +
"next": {
  +
"link": "/jsonsearch?facet=example%3Afacet1&facet=example%3Afacet2%3A40&page=4&page-size=1&query=fiets",
  +
"page": 4
  +
},
  +
"previous": {
  +
"link": "/jsonsearch?facet=example%3Afacet1&facet=example%3Afacet2%3A40&page=2&page-size=1&query=fiets",
  +
"page": 2
  +
}
  +
},
  +
"request": {
  +
"facet": [
  +
{
  +
"index": "example:facet1",
  +
"max-terms": 1
  +
},
  +
{
  +
"index": "example:facet2",
  +
"max-terms": 1
  +
}
  +
],
  +
"page-size": 1,
  +
"page": 3,
  +
"query": "fiets"
  +
},
  +
"version": "0.1.beta"
  +
}
  +
</syntaxhighlight>
   
== response ==
+
== Foutmeldingen ==
  +
{{:Edurep:Foutmeldingen/Jsonsearch}}
* response velden
 
  +
== Eigenschappen ==
* voorbeeld (stuf item data)
 
  +
{{:Edurep:Interface eigenschappen}}
  +
== Veldenlijst ==
  +
=== algemeen ===
  +
{{:Edurep:Veldenlijst/Schema.org}}
  +
=== LearningResource ===
  +
{{:Edurep:Veldenlijst/Schema.org/LearningResource}}
  +
=== Event ===
  +
{{:Edurep:Veldenlijst/Schema.org/Event}}
  +
=== invalid ===
  +
{{:Edurep:Veldenlijst/Schema.org/invalid}}
  +
=== about ===
  +
{{:Edurep:Veldenlijst/about}}
   
== foutmeldingen ==
+
== See Also ==
  +
{{:Edurep:SeeAlso|use=[[Edurep:Leermateriaal_Metadata_Opvragen|Leermateriaal Metadata Opvragen]]|sibling=[[Edurep:LOM_SearchRetrieve]] &bull; [[Edurep:SMO_SearchRetrieve]] &bull; [[CS:Entry_SearchRetrieve]]|related=[[Edurep:Veldenlijst]] &bull; [[Standaarden:Schema.org|Schema.org]]}}
* include uit foutmeldingen doc
 
   
  +
[[Categorie:Edurep]]
== veldenlijst ==
 
  +
[[Categorie:Interface]]
* include uit los veldenlijst document
 

Huidige versie van 9 feb 2022 om 10:01

Met het jsonsearch endpoint worden Edurep responses in JSON format geleverd.

Endpoints

  • productie: https://wszoeken.edurep.kennisnet.nl/jsonsearch
  • staging: https://staging.edurep.kennisnet.nl/jsonsearch

Request

argument # omschrijving
query 1 CQL zoekopdracht
page-size 0-1 aantal resultaten per pagina, max 100
page 0-1 pagina van resultatenset
facet 0-* veld om drilldown op uit te voeren
recordSchema 0-1 specificeer recordSchema (default jsonld)

Query

In Edurep kan er worden gezocht op AND/OR/NOT combinaties van trefwoorden, binnen de totale set of binnen specifieke velden.

  • fiets AND pomp
  • kasteel AND (ridder OR ridders)
  • vis AND walvis NOT potvis
  • breuken AND vak=wiskunde
  • breuken AND (titel=werkblad OR titel=taak)

Afhankelijk van de gebruikte zoekinterface zijn er verschillende zoekvelden beschikbaar, bekijk de veldenlijst voor een overzicht.

Voorbeelden:

/edurep/sruns: query=fiets AND pomp
/smo/sruns: query=smo.hReview.info exact "http://wikiwijs.samendelen.nl/get/smpid:5585/DS1"
Catalogus Service: query=Title=techniek AND Price<500
/jsonsearch: query=fiets AND schema:name="werkblad"

Beperkingen:

  • De waarde van het query argument mag maximaal 4096 tekens zijn, na urldecoding.
  • De zoekwoorden kunnen alleen letters en cijfers bevatten. Vanwege het indexatieproces zijn speciale karakters als # en $ zijn niet doorzoekbaar.
  • Wildcard zoeken is beperkt mogelijk. Zoeken op fiets* is wel mogelijk maar *fiets niet. De fiets* is mogelijk met minimaal 2 karakters. Het zoeken met het wildcard teken in een string (infix) is ook mogelijk, ook met minimaal 2 voorloopkarakters. Er mag maximaal 1 * voorkomen per trefwoord.

Paginering

Edurep resultaten worden gepagineerd aangeboden. Standaard worden de eerste 10 teruggegeven, en het is met parameters mogelijk om de verschillende pagina's van de totale resultatenset op te halen (tot een maximum van 4000). Bij een startRecord hoger, wordt een foutmelding meegegeven, maar wordt de laatste pagina getoond (alsof de startRecord gelijk is aan 4000).

Paginering in jsonsearch werkt via de volgende argumenten:

  • page
  • page-size

Met page-size kan het aantal resultaten per pagina worden ingesteld, en met page wordt aangegeven welke pagina van de totale resultatenset wordt teruggegeven.

/jsonsearch: query=*&page-size=20&page=2

Drilldown

Met een optionele term drilldown worden alle waarden van een bepaald veld cumulatief geteld over alle zoekresultaten. Dit kan slechts op een beperkt aantal velden. Er kunnen meerdere term drilldowns gedaan worden per search request door de velden te scheiden met een komma.

Het gewenste aantal resultaten in de drilldown kan worden aangegeven door ":<nummer>" aan de drilldown term toe te voegen. Als je ":0" toevoegt worden alle drilldown resultaten getoond.

De volgorde van de termen met een gelijk aantal kan verschillen per zoekopdracht. De sortering komt namelijk voort uit hoe het drilldown algoritme werkt. Voor elementen met dezelfde waarde is geen volgorde gedefinieerd omdat dit efficiënter is en weinig toegevoegde waarde heeft.

Een drilldown kan in Jsonsearch met het facet argument worden meegegeven.

/jsonsearch: query=*&facet=schema:license

Sortering

Er zijn is Edurep verschillende velden waarop gesorteerd kan worden. Standaard wordt de sortering van de zoekmachine aangehouden, en dat is op de door de zoekmachine bepaalde relevantie. Per veld kan er ascending of descending gesorteerd worden.

In de jsonsearch worden sorteerbare velden met het sort argument meegegeven. De sorteringsrichting wordt als volgt opgegeven: 'veldnaam' voor oplopend, en '-veldnaam' voor aflopend. Meerdere sorteervelden kunnen met meerdere "sort" parameters worden opgegeven of met "," gescheiden.

Oplopend:

/jsonsearch: query=dinosaurus&sort=schema:datePublished

Aflopend:

/jsonsearch: query=dinosaurus&sort=-schema:datePublished

recordSchema

Nl.gif Nederlands En.gif English

In Edurep bestaan verschillende representaties en perspectieven van een record. Deze worden opgevraagd middels een recordSchema argument.

  • Sommige recordSchema's representeren verschillende formaten van een stuk leermiddel-metadata,
  • andere beschrijven andere sets data die zijn gekoppeld aan een leermiddel-metadata record.
  • Afhankelijk van het gebruikte protocol zijn er verschillende opties beschikbaar.

Met de jsonsearch kan het recordSchema argument worden gebruikt om een ander recordSchema op te halen.

recordSchema omschrijving
jsonld (default) Record in Jsonld formaat
jsonld-plus Record in Jsonld formaat plus gekoppelde reviews (max 10)


Response

veld # beschrijving
/response 1 response containter
/response/total 1 aantal records van totale respons
/response/items 0-1 lijst met response records
/response/facets 1 facets container
/response/facets/<facetid> 0-* voor elke opgevraagde valide facet een container met de facet waarden
/response/facets/<facetid>/count 1 aantal keer dat facet waarde voorkomt in resultatenset
/response/facets/<facetid>/link 1 directe link naar query op facet waarde
/response/facets/<facetid>/link 1 de individuele facet waarde
/response/next 0-1 container met informatie over volgende pagina
/response/next/link 1 directe link naar volgende pagina
/response/next/page 1 nummer van volgende pagina
/response/previous 0-1 container met informatie over vorige pagina
/response/previous/link 1 directe link naar vorige pagina
/response/previous/page 1 nummer van vorige pagina
/response/querytimes 1 querytimes container
/request 1 request container
/request/query 1 gestelde query
/request/page-size 0-1 gevraagd aantal resultaten per pagina
/request/page 0-1 gevraagde paginanummer
/request/facet 0-1 container met opgevraagde facets
/request/facet/index 1 individuele gevraagde facet waarde
/request/facet/max-terms 1 opgevraagde maximum aantal waarden voor facet waarde
/version 1 api versie

voorbeeld

{
  "response": {
    "total": 763,
    "items": [
      {}, {}
    ],
    "facets": {
      "example:facet1": [
        {
          "count": 212,
          "link": "/jsonsearch?facet=schema%3Alicense&facet=dcterms%3Apublisher%3A40&facet-filter=example%facet1%3Dvalue1&page-size=1&query=fiets",
          "value": "value1"
        }
      ],
      "example:facet2": [
        {
          "count": 213,
          "link": "/jsonsearch?facet=schema%3Alicense&facet=dcterms%3Apublisher%3A40&facet-filter=example%3Afacet2%3DvalueX&page-size=1&query=fiets",
          "value": "valueX"
        }
      ]
    },
    "querytimes": {
      "handlingTime": 0.328,
      "indexTime": 0.015,
      "queryTime": 0.021
    },
    "next": {
        "link": "/jsonsearch?facet=example%3Afacet1&facet=example%3Afacet2%3A40&page=4&page-size=1&query=fiets",
        "page": 4
    },
    "previous": {
        "link": "/jsonsearch?facet=example%3Afacet1&facet=example%3Afacet2%3A40&page=2&page-size=1&query=fiets",
        "page": 2
    }
  },
  "request": {
    "facet": [
        {
            "index": "example:facet1",
            "max-terms": 1
        },
        {
            "index": "example:facet2",
            "max-terms": 1
        }
    ],
    "page-size": 1,
    "page": 3,
    "query": "fiets"
  },
  "version": "0.1.beta"
}

Foutmeldingen

Een foutmelding uit de jsonsearch is te herkennen aan de "error" key in de response.

Voorbeeld

{
    "error": {
        "message": "Missing required argument: 'query'",
        "type": "MissingArgument"
    },
    "version": "0.1.beta"
}

Foutcodes

type omschrijving
MissingArgument een vereist argument ontbreekt in het verzoek


Eigenschappen

Bij het maken van een koppeling op de zoekinterface van Edurep, dient men rekening te houden met een aantal eigenschappen.

Overbelasting

Het kan voorkomen dat Edurep overbelast is door een teveel aan binnenkomende requests. Deze faciliteit is ingebouwd om te voorkomen dat de responstijden teveel oplopen. In dat geval zal Edurep een HTTP 503 statuscode terugsturen. Het is raadzaam bij de implementatie met deze statuscode rekening te houden en het na een korte pauze opnieuw te proberen. Kans is heel groot dat Edurep dan weer een slot beschikbaar heeft. Voor meer informatie over de HTTP 503 melding bekijk de officiële definitie op W3C.

Compressie

De xml responses van Edurep kunnen gecomprimeerd worden verstuurd. Edurep ondersteunt de zogenaamde "deflate" en "gzip" compressie methoden voor content-encoding. De antwoorden van Edurep worden gecomprimeerd (min. 90%), waardoor het transport van alle XML geen vertragende factor meer is. De impact van het in- en uitpakken is nihil, dus de winst maximaal. De meeste browsers ondersteunen dit tegenwoordig standaard maar in backend code moet dit expliciet worden aangezet. Bijvoorbeeld in PHP-cURL gebeurt dit door het zetten van een cURL-optie: curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');.

Relevantie

Edurep bevat drie soorten velden met elk specifieke mogelijkheden voor het zoeken:

  • vrije tekstvelden: voor bepaling relevantie
  • vocabulaire velden: voor het filteren van de resultatenset
  • numerieke velden: voor het sorteren van de resultatenset

Wanneer in de zoekopdracht geen beperkingen worden aangegeven, worden de resultaten in principe in willekeurige volgorde teruggegeven. De plek van een record in deze willekeurige lijst wordt bij het harvesten van het record bepaald.

Het gebruik van filters (bijv. context=PO) heeft geen invloed op de willekeurige volgorde waarmee de records worden teruggegeven. Wanneer meerdere filters in een OR query worden gesteld, zullen de records die aan alle filters voldoen relevanter zijn en dus hoger in de resultatenlijst komen.

De daadwerkelijke relevantiebepaling wordt gedaan aan de hand van de zoekopdrachten in vrije tekstvelden. De relevantie wordt dan bepaald aan de hand van de relatieve voorkomendheid van de zoekwoorden in een record. Er wordt bijvoorbeeld gezocht op "fiets". Een record met 100 trefwoorden (waarvan 1x fiets) zal minder relevant zijn dan een record met 5 trefwoorden (waarvan 1x fiets).

Spiders

Zoekmachines als Google en Yahoo maken gebruik van programma's die geautomatiseerd het internet afzoeken en de gevonden pagina's indexeren. Het kan voorkomen dat deze spiders via de gebouwde zoekapplicatie zoekopdrachten aan Edurep stellen. Dit type zoekopdrachten zorgen voor een oneigenlijk gebruik van Edurep. Het vervuilt niet alleen de statistieken van Edurep maar ook de statistieken van de betreffende zoekapplicatie.

Er zijn verschillende manieren om de toegang voor spiders op de website te beperken, zodanig dat alleen het zoekdeel van de applicatie voor de spiders wordt afgesloten. Een overzicht hiervan is te vinden op Wikipedia.

Veldenlijst

algemeen

zoekveld x-term-drilldown sortKeys <, <=, >=, > exact
schema:name
schema:identifier V

LearningResource

zoekveld x-term-drilldown sortKeys <, <=, >=, > exact
schema:inLanguage V V
schema:description
schema:keywords
dcterms:coverage
lom:structure
lom:aggregationLevel V V
schema:version
schema:creativeWorkStatus
dcterms:creator V V
schema:dateCreated V V
dcterms:publisher V V
schema:datePublished V V
dcterms:contributor V V
schema:encodingFormat V V
schema:url V
schema:interactivityType
schema:learningResourceType.schema:termCode V V
schema:audience.schema:audienceType V V
schema:typicalAgeRange
lom:difficulty
schema:timeRequired.inSeconds V
schema:isAccessibleForFree V V
schema:license V V
schema:copyrightNotice
schema:isBasedOn
schema:isPartOf
schema:hasPart
dcterms:isReferencedBy
dcterms:isVersionOf
schema:encoding.schema:encodingFormat
dcterms:accessRights V V
schema:educationalAlignment.schema:name
schema:educationalAlignment.schema:targetName V V
schema:educationalLevel.schema:name
schema:educationalLevel.schema:termCode V V
schema:teaches.schema:termCode V V
schema:aggregateRating.schema:reviewCount V V
schema:aggregateRating.schema:ratingCount V V
schema:aggregateRating.edurep:tagCount V V
schema:aggregateRating.schema:ratingValue V V
schema:aggregateRating.edurep:bayesianRanking V V

Event

zoekveld x-term-drilldown sortKeys <, <=, >=, > exact
schema:location.schema:name
schema:location.schema:address.schema:addressLocality V V
schema:location.schema:address.schema:addressRegion V V
schema:location.schema:latitude
schema:location.schema:longitude
schema:location.schema:geo
schema:organizer.schema:name
schema:organizer.schema:location.schema:address.schema:addressLocality V V
schema:organizer.schema:location.schema:address.schema:addressRegion V V

invalid

Nl.gif Nederlands En.gif English

Velden waarmee door invalide vocabulaire waarden gezocht kan worden.

zoekveld x-term-drilldown sortKeys <, <=, >=, > exact
invalid.lom:aggregationLevel V V
invalid.schema:creativeWorkStatus V V
invalid.schema:encodingFormat V V
invalid.schema:interactivityType V V
invalid.schema:audience V V
invalid.schema:isAccessibleForFree V V
invalid.schema:license V V
invalid.dcterms:accessRights V V
invalid.schema:educationalAlignment V V
invalid.schema:educationalLevel V V

about

zoekveld x-term-drilldown sortKeys <, <=, >=, > exact
about.identifier V
about.jsonldIdentifier
about.record.identifier V
about.repository V V
about.state.code V V

See Also

Gebruikt in Leermateriaal Metadata Opvragen
Vergelijkbaar met Edurep:LOM_SearchRetrieveEdurep:SMO_SearchRetrieveCS:Entry_SearchRetrieve
Gerelateerd aan Edurep:VeldenlijstSchema.org