СОЕДИНИТЕ две таблицы, используя полнотекстовый поиск в SQL Server

У меня есть ситуация, когда я пытаюсь объединить две таблицы на основе частично совпадающих текстовых данных. Я прочитал вопрос " Использование полнотекстового поиска в SQL Server 2005 по нескольким таблицам и столбцам", и мне кажется, что лучше всего создать VIEW и добавить полнотекстовый индекс на VIEW,

Позвольте мне начать с краткого описания ситуации. У меня есть таблица Excel, которая мне нужна для расчета цены на лекарства, но названия лекарств в таблице не соответствуют точно той базе данных, в которую я собираю информацию о ценах. Таким образом, я решил, что использование полнотекстового поиска может быть лучшим способом.

То, что я сделал до сих пор, экспортирует электронную таблицу в виде файла CSV и использует BULK INSERT импортировать данные в мою базу данных. Теперь моя база данных лекарств имеет первичный ключ NDC, но эта информация не доступна в электронной таблице, к сожалению, или моя работа будет намного проще.

Мне нужно в основном соответствовать 'AMLODIPINE TAB 5MG' а также 'AMLODIPINE BESYLATE 5MG TAB', Это только один пример, но другие препараты похожи. Моя проблема в том, что я даже не уверен, как я смогу создать VIEW чтобы добавить оба столбца, без их соответствия.

Есть ли способ использовать полнотекстовый поиск в JOIN Скажите, что-то вроде:

SELECT i.Description, m.ProdDescAbbr
FROM dbo.ImportTable i
LEFT JOIN dbo.ManufNames m ON m.ProdDescAbbr <something similar to> i.Description

РЕДАКТИРОВАТЬ:

Не все названия лекарств будут содержать дополнительные слова, еще один пример, который я пытаюсь найти: 'ACYCLOVIR TAB 800MG' А ТАКЖЕ 'ACYCLOVIR 800MG TAB'

2 ответа

В своей работе я увидел эту (причудливую для меня) функцию CONTAINSTABLE, который использует полнотекстовый индекс. Может быть, очень сложная функция для этой ситуации, но я хотел бы поделиться.

Returns a table of zero, one, or more rows for those columns containing precise or fuzzy (less precise) matches to single words and phrases, the proximity of words within a certain distance of one another, or weighted matches

В целом, я вижу, что вам нужно подготовить условие поиска (сделать его текстовым), прежде чем искать его.

Пример:

SELECT select_list
FROM table AS FT_TBL 
INNER JOIN CONTAINSTABLE(table, column, contains_search_condition) AS KEY_TBL
   ON FT_TBL.unique_key_column = KEY_TBL.[KEY];

источник http://msdn.microsoft.com/en-us/library/ms189760.aspx

Вы можете добавить

CREATE VIEW view_name WITH SCHEMABINDING
AS

перед вашим SQL, чтобы создать представление. Тогда вы могли бы

CREATE UNIQUE CLUSTERED INDEX idx_name
ON view_name(Description, ProdDescAbbr)

Тогда ты можешь

CREATE FULLTEXT INDEX ON view_name

Это позволит вам запустить поиск с

WHERE CONTAINS( (Description, ProdDescAbbr), 'search_term')
Другие вопросы по тегам