Как вызвать функцию Левенштиена, используя значения из двух разных таблиц в T-SQL - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь найти расстояние Левенштайна между столбцами двух разных таблиц TableA и TableB.По сути, мне нужно сопоставить столбец TableA со всеми элементами ColumnB в TableB и найти расстояние Левенштиена

. Я создал функцию Левенштиена следующим образом:

CREATE FUNCTION [Levenshtein]
     (@value1 [NVARCHAR](MAX), 
      @value2 [NVARCHAR](MAX))
RETURNS [INT]
AS 
EXTERNAL NAME [FastenshteinAssembly].[Fastenshtein.Levenshtein].[Distance]
GO

Это в основном вызов Левенштиена.У меня есть dll на моей машине.Я пытался создать хранимую процедуру для этой операции, но я не уверен, является ли это оптимизированным подходом или нет.

Таблица B содержит миллионы CompanyNames, а TableA также состоит из тысяч CompanyNames, поэтому эта операция будет по существу a (n* м) операция.

Каков оптимизированный подход к достижению этого.

Спасибо

1 Ответ

0 голосов
/ 02 марта 2019

Нет оптимизированного подхода для этого.

Могут быть некоторые хаки, которые вы можете сделать, чтобы упростить обработку.Например, вы можете создавать таблицы поиска на каждой стороне, используя n-граммы, и сравнивать только имена, чьи ngram близки.Или вы можете использовать soundex() для той же цели - или первые три символа.

Однако, если вам необходимо сопоставить все возможности, это дорогостоящая операция n * m в SQL Server.

...