SQL Server全文搜索包含连字符短语不返回预期的结果(SQL Server full-text

2019-09-20 03:22发布

我们有使用SQL Server 2008数据库的应用程序,和全文搜索。 我试图理解为什么下面的搜索行为不同:

首先,含有连字符的单词,像这样的一句话:

contains(column_name, '"one two-three-four five"')

第二,相同的短语,其中连字符由空格替代:

contains(column_name, '"one two three four five"')

全文索引使用英语(1033)的语言环境和默认的系统停止列表。

从我的含连字符的单词等全文搜索观察,第一个应该允许在任何比赛one two three four fiveone twothreefour five 。 相反,它仅匹配one twothreefour five (而不是one two-three-four five )。


测试用例

设定:

create table ftTest 
(
    Id int identity(1,1) not null, 
    Value nvarchar(100) not null, 
    constraint PK_ftTest primary key (Id)
);

insert ftTest (Value) values ('one two-three-four five');
insert ftTest (Value) values ('one twothreefour five');

create fulltext catalog ftTest_catalog;
create fulltext index on ftTest (Value language 1033)
    key index PK_ftTest on ftTest_catalog;
GO

查询:

--returns one match
select * from ftTest where contains(Value, '"one two-three-four five"')

--returns two matches
select * from ftTest where contains(Value, '"one two three four five"')
select * from ftTest where contains(Value, 'one and "two-three-four five"')
select * from ftTest where contains(Value, '"one two-three-four" and five')
GO

清理:

drop fulltext index on ftTest
drop fulltext catalog ftTest_catalog;
drop table ftTest;

Answer 1:

http://support.microsoft.com/default.aspx?scid=kb;en-us;200043

“哪里非字母数字字符必须在搜索性判据(主要是短划线‘ - ’字符)一起使用,使用Transact-SQL LIKE子句代替FULLTEXT的或者包含谓词”。



Answer 2:

在这样的地方,你无法预料断字符它总是运行在你的字符串sys.dm_fts_parser得到的话将如何被分割并存储在内部索引的想法是一个好主意的行为案件。

例如,在运行sys.dm_fts_parser“‘一,二,三四个五’”在下面的结果 -

select * from sys.dm_fts_parser('"one two-three-four five"', 1033, NULL, 0)
--edited--
1   0   1   Exact Match one
1   0   2   Exact Match two-three-four
1   0   2   Exact Match two
1   0   3   Exact Match three
1   0   4   Exact Match four
1   0   5   Exact Match five

正如你可以从返回的结果看,字断路器解析字符串并输出六种形式这也许可以解释你看到你的运行CONTAINS查询时的结果。



Answer 3:

全文本搜索认为一个词是不带空格或标点符号的字符串。 在搜索过程中的非字母数字字符的出现可以“破”字。 因为SQL Server全文搜索是基于词引擎,标点通常不被视为和搜索索引时被忽略。 因此,像“包含(测试,‘计算机故障’)”将匹配一排的价值,A包含条款“看看我的电脑将是昂贵的失败。”

请按照链接为什么: https://support.microsoft.com/en-us/kb/200043



文章来源: SQL Server full-text search for phrase containing a hyphen doesn't return expected results