SQL Server 2012 全文搜索匹配结果

SQL Server 2012 Full Text Search match results

我想知道是否有一种方法可以使用 FREETEXT 从全文搜索中获取匹配的单词。

例如:

SELECT * 
FROM table 
WHERE FREETEXT(column_name, 'search term')

我希望能够看到 column_name 中文本的哪些部分触发了与 'search term' 的匹配,因为 FREETEXT returns 条记录列不仅仅是 FREETEXT/FREETEXTTABLE 部分中所述的 here 搜索词模式匹配。

我知道使用 FREETEXTTABLE 可以 return 排名和键,但如果可能的话,我需要知道哪些实际术语触发了匹配。

谢谢

如果你想full text search另一种方法,那么使用下面写的很多方法

Select * from Table
Where Column_Name Contains('some thing')

Select * from Table
Where Column_Name exists ('some thing')

Select * from Table
Where Column_Name in ('some thing')

Select * from Table
Where Column_Name =(some) ('some thing')

你可以试试 LIKE

SELECT * 
FROM table 
WHERE column_name like ('%search term%')

Disclaimer, I haven't done this -- I'm going from documentation. 我不确定这是否能满足您的需求,但您可以看到搜索是如何标记化的: 来自 here

After you apply a given word breaker, thesaurus, and stoplist combination in a query, you can see how Full-Text Search tokenizes the results by using the sys.dm_fts_parser dynamic management view. For more information, see sys.dm_fts_parser (Transact-SQL).

我猜想如果您想知道哪个部分(令牌)导致了匹配 - 您可能需要 运行 搜索各个令牌并比较结果集以查看哪个令牌或标记(搜索 term/s)导致了给定的匹配。

您将需要 Split String 函数

然后您将创建一个 Temporary table 永久的。

如我的示例 StagingFreeText(根据要求定义数据类型)

create table StagingFreeText (col varchar(100) not null)

然后在 StagingFreeText

上创建 Full Text Index

在脚本的开头总是截断 table

Truncate table StagingFreeText

然后将结果插入StagingFreeText

 ;with CTE as
(
SELECT * 
    FROM table 
    WHERE FREETEXT(column_name, 'search term')
)
insert into StagingFreeText(col)
SELECT value 
FROM CTE 
cross apply(select value from dbo.split_string(column_name,' '))ca

再次应用上述搜索条件

SELECT * 
FROM StagingFreeText 
WHERE FREETEXT(col, 'search term')

注意:我的脚本没有测试过,但是思路很清楚。

或者如果您不想在 StagingFreeText 上创建另一个自由文本索引,那么您可以在 #temp table 中拆分 Search Term 并加入 StagingFreeText #temp table