Thema dieser Dokumentation / Das FirstSpirit 5 Modul- / Komponenten-Modell / Von Gadgets, Aspects, Brokern und Agents / Agents / Das Interface QueryAgent (Suchanfragen definieren)
Das Interface QueryAgent (Suchanfragen definieren)
Das nachfolgend vorgestellte Interface ist Bestandteil der FirstSpirit Access-API. |
Package: de.espirit.firstspirit.agency
Alle projektbezogenen Datenstrukturen (Medien, Seiten, Vorlagen usw.) werden von FirstSpirit in einem Content-Repository verwaltet, wobei jedes FirstSpirit-Projekt ein eigenes in sich abgeschlossenes Content-Repository besitzt. Das Interface QueryAgent stellt Methoden bereit, um Suchanfragen auf diesen Content-Repositories zu definieren. Dabei werden sowohl Objektnamen als auch Inhalte (z. B. von Seiten, Datensätzen oder Medien) durchsucht, im Falle von Medien auch Texte aus dem Feld „Beschreibung“ (Volltextsuche ohne berücksichtigung von Groß- und Kleinschreibung). Außerdem berücksichtigen Suchanfragen Inhalte aus der FirstSpirit-Datenquellen-Verwaltung.
Zur Definition einer Suchanfrage wird eine Instanz vom Typ QueryAgent benötigt. Eine Instanz vom Typ QueryAgent kann über einen SpecialistsBroker (Das Interface SpecialistsBroker siehe Das Interface SpecialistsBroker) mithilfe der Methode requireSpecialist(QueryAgent.TYPE) angefordert werden:
Listing: Suchabfragen definieren - QueryAgent anfordern
...
final QueryAgent queryAgent =
_context.getBroker().requireSpecialist(QueryAgent.TYPE);
...
Das Interface bietet den Zugriff auf folgende Methode:
@NotNull Iterable<IDProvider> answer(@NotNull String query): Die Methode dient der Definition einer Suchabfrage. Der Methode wird ein einfacher Such-String übergeben. Werden mehrere Suchbegriffe übergeben, wird bei der Suche nach diesen Begriffen eine UND-Verknüpfung zugrunde gelegt, es werden nur Objekte in der Ergebnisliste angezeigt, die alle eingegebenen Suchbegriffe enthalten. Dabei ist zu beachten, dass aufgrund der eingesetzten Suchtechnologie keine Suchbegriffe mit Bindestrich (-) verwendet werden können. Stattdessen sollten die durch Bindestriche verbundenen Worte getrennt eingegeben werden, z. B. statt photovoltaik-anlage photovoltaik anlage oder auch photo anl.
Durch die Übergabe zusätzlicher Informationen innerhalb des Such-Strings kann die Ergebnismenge weiter verfeinert werden (siehe Erweiterung des Such-Strings (Beispiele)). Die Methode liefert einen Zeiger auf die typisierte Ergebnismenge der Datenstrukturen zurück, die zur Suchanfrage passen. Mithilfe eines Iterators kann anschließend über alle Elemente der Ergebnismenge iteriert werden.
Beispiel (Beanshell-Skript):
//!Beanshell
import de.espirit.firstspirit.agency.QueryAgent;
agent = context.requireSpecialist(QueryAgent.TYPE);
hits = agent.answer("solar");
iHit = hits.iterator();
while (iHit.hasNext()) {
hit = iHit.next();
print(hit);
}
Erweiterung des Such-Strings zur Verbesserung der Suchergebnisse. (Entweder über den Aufruf in einem Beanshell-Skript (s.o.) oder direkt über das Suchfeld des SiteArchitect. Im zweiten Fall müssen die automatisch gesetzten Anführungszeichen für den Suchbegriff entfernt werden):
- FirstSpirit-Elemente per UID finden:
agent.answer("fs.uid = solar_concept_car"); - Referenzen auf FirstSpirit-Medien per UID finden:
agent.answer("solar_concept_car MEDIASTORE_LEAF"); - FirstSpirit-Medien oder Referenzen auf FirstSpirit-Medien per UID finden (ODER-Verknüpfung der Suchbedingung):
agent.answer("solar_concept_car MEDIASTORE_LEAF or fs.uid = solar_concept_car"); - FirstSpirit-Elemente finden, die ein vergrößerbares Bild enthalten. Diese Eigenschaft wird im Mithras-Projekt über eine Eingabekomponente vom Typ CMS_INPUT_TOGGLE (Name: st_picture_zoomable) gesetzt:
queryAgent.answer("st_picture_zoomable = true"); - FirstSpirit-Elemente finden, die bestimmte Metadaten-Inhalte enthalten. Die hier gesuchten Metadaten werden im Mithras-Projekt über eine Eingabekomponente vom Typ CMS_INPUT_TEXT (Name: md_content) gesetzt:
queryAgent.answer("meta.md_content = *"); - FirstSpirit-Elemente finden, für die Metadaten definiert wurden, die aber bestimmte Metadaten-Inhalte nicht enthalten. Die hier gesuchten Metadaten werden im Mithras-Projekt über eine Eingabekomponente vom Typ CMS_INPUT_TEXT (Name: md_content) gesetzt:
queryAgent.answer("meta.md_content = ''"); - FirstSpirit-Elemente finden, für die Metadaten definiert wurden:
queryAgent.answer("fs.meta = 1"); - FirstSpirit-Medien mit einer bestimmten Mindestgröße (Mindestbreite und Mindesthöhe) finden (UND-Verknüpfung der Suchbedingung):
queryAgent.answer("fs.width >= 468 and fs.height >= 60"); - FirstSpirit-Elemente in einem bestimmten Verwaltungsbereich finden, z. B. alle FirstSpirit-Elemente in der Medien-Verwaltung für die Metadaten definiert wurden:
queryAgent.answer("fs.meta = 1 and fs.store=mediastore"); - FirstSpirit-Elemente finden, auf denen ein bestimmter Arbeitsablauf gestartet wurde. Dazu kann die gewünschte Workflow-ID und die gewünschte Workflow-State-ID angegeben werden ("fs.workflow = "workflow-id/workflow-state-id""):
queryAgent.answer("fs.workflow = "123456/*"");
(ab FirstSpirit 5.0R5) - FirstSpirit-Elemente finden, die durch einen Arbeitsablauf gesperrt sind:
queryAgent.answer("fs.workflow = 1");
(ab FirstSpirit 5.0R5) - FirstSpirit-Medien finden, die eine bestimmte CRC-Prüfsumme besitzen:
queryAgent.answer("fs.crc = 1180948165");
(ab FirstSpirit 5.2)
Ab FirstSpirit Version 5.0R5 können auch Wildcards (* und ?) für Abfragen im Namensraum "fs" verwendet werden. Also z. B.: fs.uid=startseite* oder fs.uid=startseite_?.