3

我有一个包含以下列的表(MyTable):

Col1: NameID VARCHAR(50) PRIMARY KEY NOT NULL Col2: 地址 VARCHAR(255)

数据示例:

名称:'1 24' 地址:'1234 Main St.'

在使用默认参数制作目录后,我在表格上做了一个全文索引。

如何实现以下查询:

 SELECT * FROM MyTable
 WHERE CONTAINS(NameID, '1')
 AND CONTAINS(Address, 'Main St.');

但是我的查询没有返回任何结果,这没有意义,因为这确实有效:

 SELECT * FROM MyTable
WHERE CONTAINS(Address, 'Main St.');

这也是:

 SELECT * FROM MyTable
 WHERE CONTAINS(Address, 'Main St.')
 AND NameID LIKE '1%'

但这也不起作用:

 SELECT * FROM MyTable
 WHERE CONTAINS(NameID, '1');

为什么在设置全文索引时选择此列包含在地址列中时,我无法查询索引的主键列(名称)?

提前致谢!

4

2 回答 2

4

由于 NameID 字段是 varchar 类型,全文将很好地处理索引。

CONTAINS(NameID, '1') 不返回任何搜索结果的原因是'1'(和其他如此小的数字)被全文视为噪声词并在索引期间被过滤掉。

要获取停用词列表,请运行以下查询 -

select * from sys.fulltext_system_stopwords where language_id = 1033;

您需要关闭或修改停止列表,可以在此处找到示例。

于 2012-10-22T17:41:11.857 回答
0

我认为这里最大的问题(我编辑了我的问题以反映这一点)是我有代表主键名称的整数,全文目录上的 Contains() 函数不兼容。这是不幸的,我仍在寻找一个全文替代使用整数目录。

于 2012-10-18T20:15:14.240 回答