怎么办了一个contains()上全文索引搜索SQL的两列(How to do a CONTAINS

2019-09-24 05:43发布

我有一个表(MyTable的),有以下栏目:

COL1:VARCHAR填充NameID(50)PRIMARY KEY NOT NULL col2的:地址VARCHAR(255)

数据实施例:

产品名称: '1 24' 的地址: '1234主街'

而且我也使得使用默认PARAMS目录后,在桌子上全文索引。

我如何能实现以下查询:

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

为什么我不能对索引,主键列(名称)查询,当我选择此列将包含在地址栏建立全文索引时?

提前致谢!

Answer 1:

由于填充NameID字段是varchar类型,全文将处理索引就好了。

背后的原因CONTAINS(填充NameID,“1”)不返回任何搜索结果是“1”(等这样的小数字)被全文视为干扰词,并在索引时间过滤掉。

要获得停用词的列表,运行下面的查询 -

select * from sys.fulltext_system_stopwords where language_id = 1033;

您需要关闭或修改止损列表,其中的一个例子,可以发现在这里 。



Answer 2:

我觉得最大的问题就在这里(和我编辑我的问题,以反映这一点)是,我已经得到整数表示主键的名称,它包含在全文目录()功能不兼容。 这是不幸的,我仍然在寻找一个全文替代与整数的目录工作。



文章来源: How to do a CONTAINS() on two columns of Full Text Index Search SQL