Ignore Dash (-) from Full Text Search (FREETEXTTABLE) search column in SQL Server(忽略SQL Server中全文搜索(FREETEXTTABLE)搜索列中的破折号(-))
问题描述
我使用CONTAINSTABLE
作为我的搜索算法。我想搜索列值,忽略破折号,特别是列值。例如,列包含‘12345-67’,则应使用‘1234567’进行搜索,如下所示。
SELECT *
FROM table1 AS FT_Table
INNER JOIN CONTAINSTABLE(table2, columnname, '1234567') AS Key_Table ON FT_Table.ID = Key_Table.[Key]
在搜索不包含破折号(-)的字符串时,有什么方法可以忽略破折号(-)吗?
推荐答案
我做了一些调查,花了几个小时:) 不幸的是,没有办法执行它。看起来像是SQL Server FTS通过断开单词(空格除外)以及特殊字符(-、{、(等))来填充单词 但它不能填充完整的Word,我的理解是,没有办法提供一些填充规则来满足需求。(我的意思是,告诉人口服务部门,如果这个词包含"-",请用""代替。) 我提供了一个澄清情况的例子。
首先,为表创建表、FTS目录、全文索引并插入示例行。
CREATE TABLE [dbo].[SampleTextData]
(
[Id] int identity(1,1) not null,
[Text] varchar(max) not null,
CONSTRAINT [PK_SampleTextData] PRIMARY KEY CLUSTERED
(
[Id] ASC
)
);
CREATE FULLTEXT CATALOG ftCatalog AS DEFAULT;
CREATE FULLTEXT INDEX ON SampleTextData
(Text)
KEY INDEX PK_SampleTextData
ON ft
INSERT INTO [SampleTextData] values ('samp-le text')
然后,提供示例查询;
select * from containstable(SampleTextData,Text,'samp-le') --Success
select * from containstable(SampleTextData,Text,'samp') --Success
select * from containstable(SampleTextData,Text,'le') --Success
select * from containstable(SampleTextData,Text,'sample') -- Fail
这些样本都是成功的,只有一个Samp-le例外。要调查情况,请执行此查询;
SELECT display_term, column_id, document_count
FROM sys.dm_fts_index_keywords (DB_ID('YourDatabase'), OBJECT_ID('SampleTextData'))
输出:
le 2 1
samp 2 1
samp-le 2 1
text 2 1
END OF FILE 2 1
查询给我们的Word结果由FTS填充服务填充。如您所见,总体结果包含‘le’、‘samp’、‘samp-le’,但不包含‘Sample’。这就是sample
查询失败的原因。
这篇关于忽略SQL Server中全文搜索(FREETEXTTABLE)搜索列中的破折号(-)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:忽略SQL Server中全文搜索(FREETEXTTABLE)搜索列中的破折号(-)


- SQL Server 将 Varchar 转换为日期时间 2021-01-01
- 如何将uuid存储为数字? 2021-01-01
- 在 Oracle 中创建 CTE 2022-01-01
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- MySQL(Windows10)使用 MyISAM 表进行 FULLTEXT 搜索不起作用 2022-01-01
- Oracle SQL 转置 2022-01-01
- 如何在oracle中获取字符串最右边的10个位置 2021-01-01
- HEROKU - 无法运行 git push heroku master 2021-01-01
- 创建索引时,具有 mysql 数据库迁移的实体框架失败 2022-01-01
- MySql 错误 150 - 外键 2021-01-01