在SQL Server中使用全文搜索加入两个表

时间:2014-05-28 17:27:21

标签: sql sql-server full-text-search

我有一种情况,我试图根据部分匹配的文本数据加入两个表。我已阅读问题Using Full-Text Search in SQL Server 2005 across multiple tables, columns,看来我的最佳选择是创建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 个答案:

答案 0 :(得分:1)

您可以添加

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')

答案 1 :(得分:1)

在我的作品中,我看到了这个(对我来说很奇怪)函数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

总的来说,我发现在寻找之前你需要准备搜索条件(make it text)。

示例:

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