Ga naar inhoud

Zoekopdrachten combineren

Met de zoektaal is het mogelijk om de resultaten van verschillende zoekopdrachten te combineren: je kan de doorsnede, de unie of het verschil van de resultaten van zoekopdrachten berekenen.

De doorsnede van twee zoekopdrachten§

De doorsnede van de resultaten van twee zoekopdrachten gebeurt door ze in één zoekopdracht neer te schrijven, gescheiden door een spatie. Een doorsnede laat je toe te zoeken naar Yesplan elementen die moeten voldoen aan meerdere voorwaarden. Met andere woorden, als dus zowel een eerste zoekopdracht als een tweede zoekopdracht waar moeten zijn.

Bijvoorbeeld, als we op zoek zijn naar alle evenementen waarvan de naam ‘Shakespeare’ bevat én die deze week doorgaan, dan kan dit met de volgende samengestelde zoekopdracht:

event:date:#thisweek event:name:Shakespeare

Het eerste deel van deze samengestelde zoekopdracht is de voorwaarde event:date:#thisweek, die alle evenementen zal ophalen die deze week plaatsvinden. De tweede voorwaarde in deze samenstelling, event:name:shakespeare, zal de resultaten van het eerste deel verder beperken tot deze die ook de naam ‘Shakespeare’ bevatten.

Tip

Merk op dat, op technisch vlak, de doorsnede wordt berekend door de resultaten van de eerste zoekopdracht te berekenen en deze dan verder te beperken tot deze die ook voldoen aan de tweede zoekopdracht. Dit betekent dat, om zo snel mogelijk resultaten te krijgen, het opportuun is om de zoekopdracht die het aantal resultaten het meeste zal beperken als eerste te gebruiken in de samenstelling.

Beschouw bijvoorbeeld de volgende twee zoekopdrachten die alle evenementen opvragen waarvan het customdataveld ‘Responsible’ de waarde ‘Jan Janssens’ bevat, én die vandaag plaatsvinden.

event:responsible:"Jan Janssens" event:date:#today

en

event:date:#today event:responsible:"Jan Janssens"

Alhoewel beide zoekopdrachten dezelfde resultaten zullen teruggeven, biedt de tweede een betere oplossing gezien hier reeds de evenementen beperkt worden tot deze die vandaag plaatsvinden, vooraleer verder te gaan filteren op de waarde van het customdataveld. De eerste zoekopdracht zal eerst alle evenementen moeten doorlopen om diegene te vinden waarbij ‘Jan Janssens’ als waarde voor ‘Responsible’ ingevuld staat, om deze dan verder te moeten beperken tot de evenementen die vandaag plaatsvinden.

In het algemeen is het daarom beter om, bij samenstellingen van zoekopdrachten waarin er een bepaalde tijdsperiode bevraagd wordt, het deel dat de evenementen beperkt tot een bepaalde periode eerst te plaatsen, alvorens deze verder te filteren.

De unie van twee zoekopdrachten§

Door gebruik te maken van een + tussen twee zoekopdrachten, krijgen we als resultaat de unie van de resultaten van beide zoekopdrachten. Een unie is nuttig wanneer je op zoek bent naar elementen die ofwel voldoen aan de ene voorwaarde, ofwel aan de andere voorwaarde. We illustreren de unie met een voorbeeld waar we alle resources in Yesplan willen vinden die ofwél van het type ‘materiaal’, ofwél van het type ‘human’ zijn:

resource:type:material + resource:type:human

Merk op dat het belangrijk is om zowel voor als na de + een spatie te voorzien om de twee zoekopdracht van elkaar te scheiden.

Het verschil tussen twee zoekopdrachten§

Door gebruik te maken van een - tussen twee zoekopdrachten, krijgen we als resultaat het verschil tussen de resultaten van beide zoekopdrachten. Het verschil is alle elementen die voldoen aan de eerste zoekopdracht in de samenstelling, maar niet aan de tweede. Bijvoorbeeld, de volgende zoekopdracht zoekt alle evenementen die plaatsvinden deze maand, maar niet deze week:

event:date:#thismonth - event:date:#thisweek

Merk op dat het belangrijk is om zowel voor als na de - een spatie te voorzien om de twee zoekopdracht van elkaar te scheiden.

Samenstellingen met meer dan twee zoekopdrachten§

Het samenstellen van zoekopdrachten is niet beperkt tot twee. Je kan een arbitrair aantal zoekopdrachten combineren.

Wanneer we in een samengestelde zoekopdracht uitsluitend de unie (+) óf uitsluitend de doorsnede (spatie) gebruiken, dan volstaat het om de verschillende delen van de zoekopdracht gewoon ná elkaar te plaatsen.

Bijvoorbeeld:

event:location:balzaal + event:location:theaterzaal + event:location:gymzaal

Wanneer we echter verschillende operatoren (+, - of spatie) door elkaar gebruiken in een zoekopdracht, is het noodzakelijk om aan te geven welke delen van de zoekopdracht bij elkaar horen. Hiervoor gebruik je ronde haakjes, ( en ).

Willen we bijvoorbeeld op zoek gaan naar alle evenementen die doorgaan in de Balzaal, én die óf deze week plaatsvinden óf waarvan de naam ‘Hamlet’ bevat, dan kan dat als volgt:

event:location:balzaal (event:date:#thisweek + event:name:hamlet)

Indien we de haakjes zouden weglaten - dus: event:location:balzaal event:date:#thisweek + event:name:hamlet - dan is de betekenis van de zoekopdracht dubbelzinnig. Er is geen volgorde gedefineerd voor de uitvoering van doorsnede en unie, waardoor Yesplan zelf zal kiezen tussen de volgende twee mogelijke betekenissen:

  • alle evenementen die doorgaan in de Balzaal, én die óf deze week plaatsvinden óf waarvan de naam ‘Hamlet’ bevat.
  • alle evenementen die ófwel doorgaan in de Balzaal gedurende deze week, ófwel waarvan de naam ‘Hamlet’ bevat.

Zo resulteert de volgende zoekopdracht in alle evenementen die ‘Hamlet’ bevatten, óf die deze maand plaatsvinden maar niet deze week:

event:name:hamlet + (event:date:#thismonth - event:date:#thisweek)

Als we willen uitdrukken dat we op zoek zijn naar alle evenementen die ófwel ‘Hamlet’ bevatten ófwel deze maand plaatsvinden, én die niet deze week plaatsvinden, dan kan dit door bovenstaande aan te passen naar:

(event:name:hamlet + event:date:#thismonth) - event:date:#thisweek