Inhaltsverzeichnis

"Wer suchet, der findet." Die gezielte Recherche in der IT-Dokumentation bedingt eine schnelle und komfortable Suche. Oftmals ist eine gezielte Suche der kürzere Weg als das Klicken durch Menüstrukturen.

Das Suchfeld

Das Suchfeld befindet sich in der Web GUI von i-doit in der oberen rechten Ecke. Dort kann nach beliebigen Begriffen in der IT-Dokumentation gesucht werden. Beim Tippen erscheinen erste Suchergebnisse (Suchvorschläge), die mit der Maus oder Tastatur ausgewählt werden können (Autovervollständigung), um direkt in den gefundenen Datensatz zu springen.

Neben der Freitextsuche, kann die Suche auf bestimmte Objekt-Attribute beschränkt werden:

  • Beginnt die Suche mit einer Raute, gefolgt von der Objekt-ID (#123), wird nach Drücken der Return-Taste die Übersichtsseite des Objekts mit ebendieser ID aufgerufen.
  • Beginnt die Suche mit dem Stichwort title, gefolgt von einem Doppelpunkt und dem Objekt-Titel, wird das entsprechende Objekt angezeigt (title:acme).

Das Suchergebnis

Führen die oben genannte Suchvorschläge nicht zum gewünschten Ergebnis, wird nach Drücken der Return-Taste eine Seite mit Suchergebnissen präsentiert. Neben jedem gefundenen Datensatz wird die Quelle genannt, beispielsweise das Attribut einer Kategorie eines Objekttyps im CMDB-Modul.

Lesezeichen/Favoriten setzen

Jede Suche kann über die URL referenziert werden. Wird nach dem Begriff "acme" gesucht, ergibt das die URL http://i-doit/i-doit/search?q=acme. So können Suchergebnisse als Lesezeichen/Favoriten im Webbrowser gespeichert werden, um sie schneller wieder aufzurufen.

Such-Modus

Für die Suche kann aus drei Modi ausgewählt werden, die zu unterschiedlichen Ergebnissen führen können:

  • Normal: Für die Suche wird die Indexierung (siehe unten) verwendet. Dies ist die Standard-Einstellung.
  • Fuzzy Search: Es wird eine "unscharfe" Suche über den Index durchgeführt. Beispielsweise führen kleine Buchstabendreher zum richtigen Ergebnis.
  • Deep Search: Es werden nacheinander Attribute durchsucht. Diese Suche nimmt mehr Zeit in Anspruch.

Der Such-Modus kann unter Extras → Suche nach der ersten Suche ausgewählt werden. Um einen bestimmten Modus automatisch zu verwenden, kann dieser unter Verwaltung → Systemeinstellungen → Mandanteneinstellungen → Suche → Standard Such-Modus ausgewählt werden.

Automatische Deep Search

Sollte die Suche im voreingestellten Modus (siehe oben) kein oder ein unzureichendes Ergebnis liefern, kann automatisch die Deep Search ausgeführt werden. Dieses Verhalten wird unter Verwaltung → Systemeinstellungen → Mandanteneinstellungen → Suche → Automatische DeepSearch konfiguriert:

OptionBeschreibung
AktivDie Such-Ergebnisse werden durch eine zusätzliche Deep Search ergänzt.
Aktiv, wenn keine Ergebnisse gefunden werdenDie zusätzliche Deep Search wird gestartet, wenn keine Ergebnisse gefunden worden sind.
DeaktiviertDie zusätzliche Deep Search wird nicht berücksichtigt.

Indexierung

Initial wird der Suchindex automatisch beim Update und der Installation erzeugt. Nur in sehr großen Datenbanken mit mehr als 500.000 Objekten muss dieser manuell erzeugt werden, damit die Suche performant läuft und gute Ergebnisse liefert. Der Index kann unabhängig von Benutzer-Interaktionen im Hintergrund erstellt bzw. aktualisiert werden. Angestoßen wird diese Aktion über die i-doit Console. Ein Beispielaufruf sowie Erklärungen zu den möglichen Parametern können dem entsprechenden Artikel entnommen werden.

Alternativ kann der Reindex auch in der i-doit Verwaltung unter Systemtools > Cache / Datenbank über die Schaltfläche Suche-Index erneuern ausgeführt werden.

Speicherbedarf

Auf einem Unix-artigen Betriebssystem wird der Index pro 1 Million indizierter Datensätze ca. 500 MByte groß. Die Dauer einer Suchabfrage wird durch große Indizes in der Regel nicht erhöht.

Über die Konsole suchen

Die i-doit Console erlaubt auch das Suchen über die Kommandozeile. Die nötige Option heißt search. Ein Beispielaufruf ist im Artikel zu finden, der näher auf die Optionen und Parameter der i-doit Console eingeht.

Über die API suchen

Über die programmierbare Schnittstelle (API) von i-doit kann ebenfalls in der IT-Dokumentation gesucht werden. Die nötige Methode lautet idoit.search:

{
    "version": "2.0",
    "method": "idoit.search",
    "params": {
        "q": "acme",
        "apikey": "c1ia5q",
        "language": "en"
    },
    "id": 1
}

Die Antwort vom Server sieht folgendermaßen aus:

{
    "jsonrpc": "2.0",
    "result": [
        {
            "documentId": "1412",
            "key": "Client > Ip > Dns domain",
            "value": "Laptop 001: intern.acme-it.example",
            "type": "cmdb",
            "link": "\/?objID=1412&catgID=47&cateID=47&highlight=acme",
            "score": 0
        },
        // […]
    ],
    "id": 1
}

Indexierung anpassen

Die Indexierung von i-doit beansprucht viele Funktionen, die von MySQL/MariaDB zur Verfügung gestellt werden. Diese lassen sich benutzerdefiniert anpassen. Für einige Einstellungen wird die Konfigurationsdatei von MySQL/MariaDB angepasst (zum Beispiel unter /etc/mysql/conf.d/i-doit.cnf). Für andere ist das Ausführen von SQL-Statements erforderlich, wofür sich der Client auf der Kommandozeile eignet. Beispiel:

mysql -uroot -p -hlocalhost

Wortlänge

Eine wichtige Frage lautet, wie lang ein Wort mindestens sein muss, damit es indexiert wird. Häufig steht dieser Wert auf 3 Zeichen. Begriffe wie "PC 01" werden hiermit nicht gefunden. Geeignet wäre die Angabe von 2 oder sogar 1 Zeichen.

innodb_ft_min_token_size = 2 # minimale Zeichenanzahl eines Suchbegriffes

Diese Einstellung könnte dazu führen, dass der Index um ein vielfaches größer wird.

Worttrenner

Um Wörter voneinander zu unterscheiden, werden verschiedene Zeichen als Worttrenner herangezogen (z. B. Leerzeichen, Punkt, Strich). Damit der Begriff "PC-01" gefunden wird, wird dieser in "PC" und "01" aufgeteilt. Hier ist also wieder die Wortlänge entscheidend, ob "PC" und "01" indiziert werden oder nicht.

Stoppwörter

Als Stoppwörter gelten Begriffe, die bei einer Suche ignoriert werden. Daher sollte der Index diese nicht berücksichtigen. Zu diesen Wörtern zählen beispielswese "am", "dem" und "mit". MySQL bringt bereits eine Liste an Stoppwörtern mit, die allerdings relativ klein ausfällt und nur englische Begriffe beinhaltet. Diese lässt sich allerdings durch eine eigene Liste ersetzen. Dazu dienen die folgenden SQL Statements:

# System-Datenbank von i-doit angeben:
USE idoit_system;

## Falls die Tabelle noch nicht existiert, sollte sie erstellt werden:
CREATE TABLE IF NOT EXISTS isys_search_stopwords (value VARCHAR(18) NOT NULL DEFAULT '') ENGINE=INNODB DEFAULT CHARSET=latin1;

## Tabelle leeren:
TRUNCATE TABLE isys_search_stopwords;

## Liste von deutschen Stoppwörtern einfügen:
INSERT INTO isys_search_stopwords (value)
VALUES ('aber'), ('als'), ('also'), ('am'), ('an'), ('auch'), ('auf'), ('aus'), ('bei'), ('bin'), ('bis'), ('bist'), ('da'), ('dadurch'), ('daher'), ('darum'), ('das'), ('daß'), ('dass'), ('dein'), ('deine'), ('dem'), ('den'), ('der'), ('des'), ('deshalb'), ('dessen'), ('die'), ('dies'), ('dieser'), ('dieses'), ('doch'), ('dort'), ('du'), ('durch'), ('ein'), ('eine'), ('einem'), ('einen'), ('einer'), ('eines'), ('er'), ('es'), ('euer'), ('eure'), ('für'), ('hatte'), ('hatten'), ('hattest'), ('hattet'), ('hier'), ('hinter'), ('ich'), ('ihr'), ('ihre'), ('im'), ('in'), ('ist'), ('ja'), ('jede'), ('jedem'), ('jeden'), ('jeder'), ('jedes'), ('jener'), ('jenes'), ('jetzt'), ('kann'), ('kannst'), ('können'), ('könnt'), ('machen'), ('mein'), ('meine'), ('mit'), ('muß'), ('müssen'), ('mußt'), ('musst'), ('müßt'), ('nach'), ('nachdem'), ('nein'), ('nicht'), ('nun'), ('oder'), ('seid'), ('sein'), ('seine'), ('sich'), ('sie'), ('sind'), ('soll'), ('sollen'), ('sollst'), ('sollt'), ('sonst'), ('soweit'), ('sowie'), ('über'), ('und'), ('unser'), ('unsere'), ('unter'), ('vom'), ('von'), ('vor'), ('wann'), ('warum'), ('was'), ('weiter'), ('weitere'), ('wenn'), ('wer'), ('werde'), ('werden'), ('werdet'), ('weshalb'), ('wie'), ('wieder'), ('wieso'), ('wir'), ('wird'), ('wirst'), ('wo'), ('woher'), ('wohin'), ('zu'), ('zum'), ('zur');

Eine Liste von Stoppwörtern in verschiedenen Sprachen können im Internet schnell recherchiert werden.

Damit diese Liste die von MySQL ersetzt, wird folgende Einstellungen nötig:

innodb_ft_server_stopword_table = 'idoit_system/isys_search_stopwords'

Änderungen am Index aktivieren

Damit Änderungen am Index-Verhalten wirksam werden, sind drei Schritte erforderlich. Erst sollte der MySQL-Dienst neu gestartet werden. Unter Debian-basierten Betriebssystemen führt man folgenden Befehl aus:

sudo systemctl restart mysql.service

Anschließend muss folgendes SQL Statement für jede Mandanten-Datenbank ausgeführt werden:

OPTIMIZE TABLE isys_search_idx;

Vollständiges SQL Statement für den ersten Mandanten mit der Datenbank idoit_data:

USE idoit_data;
OPTIMIZE TABLE isys_search_idx;

Zum Schluss muss eine Neu-Indexing über die i-doit Console oder die i-doit Verwaltung durchgeführt werden (siehe oben).