Lade...
 

CX_OBJECT_DICTIONARY...::GetObjectsWithDLDistanceWithBKTree

CX_OBJECT_DICTIONARY...::GetObjectsWithDLDistanceWithBKTree

230545
Beschreibung:

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

Ein auf das Dictionary basierter BK-Tree wird nach Schlüssel durchsucht, die einen Abstand zum Suchbegriff haben, welcher maximal der angegebenen Distanz entspricht. Die zu diesen Schlüsseln gehörenden Objekte werden zusammen mit den jeweils berechneten Distanzen zurückgegeben. Hierfür wird eine Collection angelegt, in die Objekte vom spezifizerten Typ eingefügt werden. In diesen Objekten wird in den angegebenen dynamischen Datenfeldern jeweils die Distanz und das Objekt selbst hinterlegt.

Diese Methode liefert dieselben Ergebnisse wie CX_OBJECT_DICTIONARY...::GetObjectsWithDLDistance, nutzt intern jedoch einen BK-Tree. Dadurch können Suchen unter einer etwas größeren Speichernutzung und einer Vorverarbeitung vor der ersten Abfrage deutlich schneller durchgeführt werden. Über CX_OBJECT_DICTIONARY...::CreateBKTree kann der Baum auch ohne eine Abfrage erstellt werden.

Bei einem mehrsprachigen Dictionary wird der BK-Tree immer nur für die aktuelle Sprache aufgebaut und auch nur die Schlüssel dieser Sprache werden in der Suche berücksichtigt. Alle Bäume können jedoch gleichzeitig gehalten werden.

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

Hinweis: Der BK-Tree ist immer transient und muss nach jeder Änderung im Dictionary neu aufgebaut werden, bevor die Änderung berücksichtigt wird. Die Überprüfung auf Aktualität findet dabei beim gesetzten Gültigkeit erzwingen Flag automatisch statt, wobei beim mehrsprachigen Dictionary ein Baum als veraltet gilt, sobald bei irgendeiner Sprache etwas geändert wurde.
Aktuell können nur Änderungen erkannt werden, die nicht in derselben Sekunde stattfinden, in welcher der Baum zuletzt erstellt wurde.

Werden die Distanzen selbst nicht benötigt, so ist die Methode CX_OBJECT_DICTIONARY...::QueryByDLDistanceWithBKTree zu nutzen.

Mit der Funktion CX_OBJECT_DICTIONARY...::DestroyBKTree kann ein Baum optional wieder entfernt werden.

Code-Beispiel:
"level" "masterObject" CX_CONTAINER 3 "Suchbegriff" TRUE dictionary Call(GetObjetcsWithDLDistanceWithBKTree) -> coll
Stack
Stack Position Objekttype Kurzbeschreibung
Stack(In) Top CX_OBJECT_DICTIONARY... Dictionary
  Top-1 INTEGER Gültigkeit erzwingen. 0 oder 1.
  Top-2 STRING Suchbegriff
  Top-3 INTEGER Maximal zulässige Distanz
  Top-4 INTEGER Klassenkonstante, in welche die Ergebnisse eingeführt werden sollen.
  Top-5 STRING Name eines dynamischen Datenfelds, um die Objekte selbst zu speichern
  Top-6 STRING Name eines dynamischen Datenfelds, um die Distanzen der Ergebnisse zu speichern
Stack(Out) Top COLLECTION Objekte vom spezifizierten Typ mit den gefundenen Objekten und den zugehörigen Distanzen in den angegebenen dynamischen Datenfeldern.
Funktionsaufruf: Call(GetObjectsWithDlDistanceWithBKTree)