Startseite / Blog / Wie funktioniert die Suche in smart.finder und map.apps Smart Search?

Wie funktioniert die Suche in smart.finder und map.apps Smart Search?

Kristian Senkler 26. August 2015

Die Suche stellt im smart.finder und der map.apps Smart Search Extension den zentralen funktionalen Aspekt dar. Dieser Post wird die Suche in beiden Produkten erläutern und auf zentrale Fragen eingehen: Welche Dokumente befinden sich in meinem Index? Wie kann ich diese schnell und zielgerichtet finden?

Suche im smart.finder

Die Suche im smart.finder ist in zwei Schritte aufgeteilt: eine Suggest-Suche und eine nachgelagerte Facettensuche

Suggest-Suche

Eine Suggest-Suche bedeutet, dass Begriffe in Abhängigkeit der Nutzereingabe vorgeschlagen werden. Diese können:

  • den gleichen Anfang haben
  • ähnlich sein in Bezug auf die verwendeten Buchstaben
  • eine ähnliche Bedeutung haben

Die Suggest-Funktion des smart.finder verwendet ein Fuzzy-Modul, das auf dem Levenshtein-Algorithmus beruht. Die vorgeschlagenen Treffer sind Begriffe, die direkt aus dem Index abgeleitet werden. Die Reihenfolge der gefundenen Treffer richtet sich nach der Anzahl der Dokumente, in denen der Term auftritt (sog. Term frequency).

Levenshtein Algorithmus
Der Levenshtein Algorithmus bezeichnet die Mindestzahl an Editieroperationen die notwendig sind, um eine bestimmte Zeichenkette in eine andere zu transformieren. Je weniger Editieroperationen verwendet werden müssen, desto ähnlicher sind die beiden Begriffe. Editieroperationen sind ErsetzenEinfügen, oder Löschen von Zeichen. Eine semantische Ähnlichkeit wird nicht berücksichtigt.

Weitere Details siehe z.B.: https://de.wikipedia.org/wiki/Levenshtein-Distanz.

Im folgenden Beispiel wird der Term „gym“ eingegeben und der Begriff „gymnasium“ als Begriff mit der größten Häufigkeit in den Dokumenten des Index vorgeschlagen. Die folgenden Begriffe der Vorschlagliste sind dem eingegebenen ähnlich, weisen aber eine immer geringer werdende Häufigkeit auf.

Als zusätzliche Variante werden Phrasen vorgeschlagen:

Für die Suggest-Suche werden zwei Felder im Schema des Server definiert, aus denen die Begriffe basierend auf der Nutzereingabe vorgeschlagen werden.

  • suggest_word: beinhaltet alle Terme als mehr oder weniger komplette Worte
  • suggest_phase: beinhaltet Phrasen als sogenannte Shingles

Basierend auf den Inhalten dieser Felder wird für die Suggest-Suche ein Dictionary befüllt (hier: HighFrequencyDictionaryFactory), welches zur Laufzeit die vorgeschlagenen Begriffe liefert.

Facettensuche

Wird ein Begriff aus der Liste der Vorschläge seitens des Nutzers ausgewählt, wird im smart.finder die Facettensuche angestoßen. Exemplarisch sieht diese wie folgt aus:

Syntax der Facettensuche

q=suggest_word%3Alandesvermessungsamt&wt=json&rows=0&start=0&facet=true&facet.field=publisher&facet.field=language&facet.field=type&facet.field=format&facet.field=accessRights

Es wird nur gegen die kompletten Begriffe (suggest_word) gesucht. Die Facetten sind natürlich abhängig von der jeweiligen Konfiguration der app (hier: language, type, format, accessRights, publisher)

Die Antwort des Servers beinhaltet die Facetten samt Häufigkeit:

Facetten Antwort

[...]
facet_counts: {
  facet_queries: {},
  facet_fields: {
    publisher: ["Landesvermessungsamt Schleswig-Holstein", 6, "Bundesamt für Naturschutz", 0,
      "European Commission, DG Joint Research Centre - Institute for Environment and Sustainability - Digital Earth and Reference Data Unit",
      0, "GIS-Zentrum Kanton Zürich", 0
    ],
    language: ["ger", 6, "eng", 0],
    [...]
  },
  facet_dates: {},
  facet_ranges: {},
  facet_intervals: {}
}

Das Ergebnis zeigt z.B., dass es sechs Dokumente im Index gibt, die im Feld "language" den Wert "ger" aufweisen und den Suchbegriff "landesvermessungsamt" beinhalten. Bei Auswahl weiterer Facetten im smart.finder Client wird der Ergebnisraum entsprechend durch die Verundung oder Veroderung der zusätzlichen Facetten weiter eingeschränkt.

Suche mit der map.apps Smart Search Extension

Die Suche mit der map.apps Smart Search Extension unterscheidet sich von den Suchen in smart.finder in so fern, als dass nur eine „normale“ Suche abgesetzt wird, also keine explizite Suggest-Suche und keine Fascettensuche.

Allerdings ist der Suchalgorithmus sehr flexibel ausgelegt. Er besteht im Wesentlichen aus drei Teilen:

  1. Fuzzy-Suche
  2. Wildcard-Suche des Begriffs
  3. Direkt Match des Begriffs

Beispiel: Der Nutzer sucht nach „Hoch Musik“. Der relevante Teil der Suche ergibt sich dann wie folgt:

Hoch~ OR Musik~ OR Hoch*^98 OR Musik*^98 OR (Hoch* Musik*)^99 OR (Hoch Musik)^100

In Prosa bedeutet dies, dass Dokumente gesucht werden, die

  • die Terme „Hoch“ und „Musik“ exakt enthalten: (Hoch Musik)^100
  • die sowohl Terme enthalten, die mit “Hoch” als auch solche, die mit “Musik” anfangen: (Hoch* Musik*)^99
  • die entweder Terme enthalten die mit „Hoch“ oder solche, die mit „Musik“ anfangen: Hoch*^98 OR Musik*^98
  • die ähnliche Terme wie „Hoch“ oder „Musik“ enthalten: Hoch~ OR Musik~

Die Relevanz der Teilergebnisse wird durch den Query-Boost Faktor determiniert (z.B. ^99). Je höher dieser ist, desto weiter oben stehen die Dokumente in der Ergebnisliste. Dieser Faktor kann für die Teile der Suche, in denen er verwendet wird, nicht angepasst werden.

Anders ist es beim Grad der Ähnlichkeit, welcher durch die Tilde (~) kodiert wird. Dieses Zeichen gibt an, dass sie Suche nach Dokumente in diesem Fall „fuzzy“ erfolgt. Diesen Teil der Suche kann der Anwender sowohl über die Oberfläche als auch in der app.json anpassen.

Erlaubte Werte sind:

  • Nicht verwenden = keine Fuzzy-Suche
  • Server Standard verwenden = entspricht einer Editierdistanz von 2
  • "0" = exakt
  • "1" = ähnlich
  • "2" = unähnlich

Kristian ist Product Owner für die Produkte smart.finder, smart.finder SDI und map.apps Smart Search.