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
我想知道是否有一种方法可以使用 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