在搜索和调整您的问题后,我在全文搜索中发现了两个主要错误:
- 连字符可能被视为一个分词。它仅
| 1 | kayer-meyar |
在我使用时返回'"ME*"'
。它不返回| 2 | KA-ME |
。问题是因为您的条件只允许单词以 (not end with
or in a middle
)开头ME + at least one character
。你可以说,“那它怎么会 在这个词的中间返回| 1 | kayer-meyar |
字符串呢?” me
. 好吧,这是因为全文 serach 不将其视为单个单词,而是将其视为两个单独的单词(类似于kayer meyar
),因此它满足了 requrement( me*
)。同样,在KA-ME
它识别为KA ME
而不是单个单词的情况下,它也未能满足条件(尽管它带有星号,ME
但之后没有额外的字符)
- 您是否尝试过重建全文索引?.
现在的解决方案是:
我已经关闭了全文搜索查询的停止列表
使用这个查询(我的表名是MyTable
):
ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF
然后运行您的查询。这次你会得到你想要的结果。
这是我的完整查询:
--CREATE TABLE MyTable
--(
--Id INT IDENTITY(1,1),
--Name varchar(max) Not Null
--)
---- To see if FULLTEXT installed or not
--SELECT SERVERPROPERTY('IsFullTextInstalled')
---- http://stackoverflow.com/questions/2306825/why-cant-i-create-this-sql-server-full-text-index
---- https://technet.microsoft.com/en-us/library/ms187317.aspx
---- http://stackoverflow.com/questions/2306825/why-cant-i-create-this-sql-server-full-text-index
---- http://stackoverflow.com/questions/2315577/sql-server-2008-full-text-search-on-a-table-with-a-composite-primary-key
--CREATE UNIQUE INDEX ui_MyTable ON MyTable(Id);
--select name from sysindexes where object_id('MyTable') = id;
--CREATE FULLTEXT CATALOG ft AS DEFAULT;
--CREATE FULLTEXT INDEX ON MyTable(Name)
-- KEY INDEX ui_MyTable
-- WITH STOPLIST = SYSTEM;
--GO
--INSERT INTO MyTable(Name) VALUES('kayer-meyar'),('KA-ME');
ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF
select *
from MyTable
where CONTAINS(Name, '"ME*"')
select *
from MyTable
where CONTAINS(Name, '"KA*"')