Lade...
 

CX_OBJECT_DICTIONARY...::QueryByDLDistance

CX_OBJECT_DICTIONARY...::QueryByDLDistance

174494
Beschreibung:

Diese Methode bezieht sich auf die Damerau-Levinshtein-Distanz. Für eine Beschreibung dieser siehe CX_STRING::DLDistance.

Im Dictionary werden alle Schlüssel geprüft, ob diese einen Abstand zum Suchbegriff haben, welcher maximal der angegebenen Distanz entspricht. Die zu diesen Schlüsseln gehörenden Objekte werden in einer Collection zurückgegeben.

Falls diese Methode auf einem mehrsprachigen Dictionary aufgerufen wird, dann werden nur die Schlüssel in der aktuell aktiven Sprache mit dem Suchbegriff verglichen.

Wird die Methode auf einem CI-Dictionary aufgerufen, dann werden Unterschiede in der Groß-/Kleinschreibung bei der Berechnung der DLDistance nicht berücksichtigt.

Hinweis: Diese Methode verwendet kein Index. Das heißt, dass jede Abfrage immer gegen alle Schlüssel abgeglichen werden muss, sodass die Dauer der Query linear mit der Anzahl der Elemente im Dictionary steigt.
Suchen für eine sehr kleine Distanzen (1-2) laufen schneller ab, da das Dictionary viele Schlüssel anhand einfacher Metriken (Länge & BagDistance) von vornherein ausschließen kann und somit die aufwendige Berechnung der DLDistance einsparen kann.
Ab DLL-Version: 230545 gibt es auch die Funktion CX_OBJECT_DICTIONARY...::QueryByDLDistanceWithBKTree, die bei großer Anzahl an Anfragen und einem großen Dictionary deutlich schneller sein kann. Da die Erstellung des Baumes jedoch ebenfalls nicht vernachlässigbare Zeit in Anspruch nimmt und der Baum zudem bei jeder Änderung neu aufgebaut werden muss, sollte bei jedem Anwendungsfall zwischen den beiden Methoden abgewogen werden.

Möchte man zusätzlich die entsprechenden Distanzen zurückgegeben bekommen, ist die Funktion CX_OBJECT_DICTIONARY...::GetObjectsWithDLDistance zu nutzen.

Code-Beispiel:
3 "Suchbegriff" dictionary Call(QueryByDLDistance) -> coll
Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top CX_OBJECT_DICTIONARY... Dictionary
  Top-1 STRING Suchbegriff
  Top-2 INTEGER Maximal zulässige Distanz
Stack(Out) Top COLLECTION Objekte mit genügend kleiner Distanz
Funktionsaufruf: Call(QueryByDLDistance)