SQL Server全文包含某些不起作用的文字

SQL Server全文包含某些不起作用的文字,sql,sql-server,full-text-search,Sql,Sql Server,Full Text Search,我有一个全文搜索表。它通常运行良好。但是,在某些情况下,它失败了 比如,;当我在“color*”附近搜索“red*”时,它工作正常 但是,如果我搜索“red*”附近的“*””,它将失败。它不适用于任何以the -- working case SELECT * FROM MyTable WHERE CONTAINS(MyColumn, ' "red*" NEAR "color*" ') -- failed case SELECT * FROM MyTable WHERE CONTAINS(MyC

我有一个全文搜索表。它通常运行良好。但是,在某些情况下,它失败了

比如,;当我在“color*”附近搜索“red*”时,它工作正常

但是,如果我搜索“red*”附近的“*””,它将失败。它不适用于任何以
the

-- working case
SELECT *
FROM MyTable
WHERE CONTAINS(MyColumn, ' "red*" NEAR "color*" ')

-- failed case
SELECT *
FROM MyTable
WHERE CONTAINS(MyColumn, ' "the*" NEAR "red*" ')

有人知道原因吗?

您在全文搜索中体验到的是stopwords(也称为噪音词)的概念。大多数全文搜索引擎都有一个在搜索中被输入的非常常见的单词列表,因为它们不够具体,不足以被认为是相关的

在SQL Server中,您可以通过此查询显示为英语语言配置的停止字列表(我敢打赌,
'the'
是该列表的一部分):

您可以通过以下方式管理停止词

也可以禁用stopwords,但我不建议:

alter fulltext index on mytable set stoplist = off

您正在体验的是全文搜索中stopwords(也称为噪音词)的概念。大多数全文搜索引擎都有一个在搜索中被输入的非常常见的单词列表,因为它们不够具体,不足以被认为是相关的

在SQL Server中,您可以通过此查询显示为英语语言配置的停止字列表(我敢打赌,
'the'
是该列表的一部分):

您可以通过以下方式管理停止词

也可以禁用stopwords,但我不建议:

alter fulltext index on mytable set stoplist = off
在全文索引中,“The”是一个停止词(或“noise word”)。这意味着该词将不会被索引,也不会使用
CONTAINS
进行搜索。这可以在文档一开始就看到:

为了防止完整的文本索引膨胀,SQL Server有一个 丢弃不起作用的常见字符串的机制 搜索。这些被丢弃的字符串称为停止字。索引期间 创建时,全文引擎会从全文中忽略停止字 指数这意味着全文查询不会搜索stopwords

停止单词。停止词可以是在特定语言中有意义的词。例如,在英语中,像“a,” “and”、“is”和“the”在全文索引中被省略,因为它们 已知对搜索无效。停止字也可以是标记 这没有语言意义

重点补充

如果答案是可信的,您可以从全文索引中删除停止列表,然后创建一个,如上所述,我在下面的示例中介绍:

ALTER FULLTEXT INDEX ON dbo.MyTable SET STOPLIST = OFF;

CREATE FULLTEXT STOPLIST NoTheStopList;

ALTER FULLTEXT STOPLIST NoTheStopList ADD 'are' LANGUAGE 'British';
ALTER FULLTEXT STOPLIST NoTheStopList ADD 'a' LANGUAGE 'British';
ALTER FULLTEXT STOPLIST NoTheStopList ADD 'is' LANGUAGE 'British';
ALTER FULLTEXT STOPLIST NoTheStopList ADD 'and' LANGUAGE 'British';
...

ALTER FULLTEXT INDEX ON dbo.MyTable SET STOPLIST = NoTheStopList;
在全文索引中,“The”是一个停止词(或“noise word”)。这意味着该词将不会被索引,也不会使用
CONTAINS
进行搜索。这可以在文档一开始就看到:

为了防止完整的文本索引膨胀,SQL Server有一个 丢弃不起作用的常见字符串的机制 搜索。这些被丢弃的字符串称为停止字。索引期间 创建时,全文引擎会从全文中忽略停止字 指数这意味着全文查询不会搜索stopwords

停止单词。停止词可以是在特定语言中有意义的词。例如,在英语中,像“a,” “and”、“is”和“the”在全文索引中被省略,因为它们 已知对搜索无效。停止字也可以是标记 这没有语言意义

重点补充

如果答案是可信的,您可以从全文索引中删除停止列表,然后创建一个,如上所述,我在下面的示例中介绍:

ALTER FULLTEXT INDEX ON dbo.MyTable SET STOPLIST = OFF;

CREATE FULLTEXT STOPLIST NoTheStopList;

ALTER FULLTEXT STOPLIST NoTheStopList ADD 'are' LANGUAGE 'British';
ALTER FULLTEXT STOPLIST NoTheStopList ADD 'a' LANGUAGE 'British';
ALTER FULLTEXT STOPLIST NoTheStopList ADD 'is' LANGUAGE 'British';
ALTER FULLTEXT STOPLIST NoTheStopList ADD 'and' LANGUAGE 'British';
...

ALTER FULLTEXT INDEX ON dbo.MyTable SET STOPLIST = NoTheStopList;

除非我回忆不正确,否则相当肯定
'the'
被归类为“噪音词”。除非我回忆不正确,否则相当肯定
'the'
被归类为“噪音词”。stopwords中没有记录。stopwords中没有记录。