gpt4 book ai didi

sql-server - SQL Azure CONTAINS 不返回所有结果

转载 作者:行者123 更新时间:2023-12-03 14:28:02 24 4
gpt4 key购买 nike

我们在下表中添加了自由文本搜索:

| 1 | kayer-meyar | 
| 2 | KA-ME |

但是,

select * 
from Names
where CONTAINS(name, '"ME*"')

仅返回:

| 1 | kayer-meyar |

同时,

select * 
from Names
where CONTAINS(name, '"KA*"')

同时返回:

| 1 | kayer-meyar |
| 2 | KA-ME |

当我们运行时:

select * 
from sys.dm_fts_parser('"KA-ME"', 1033, NULL, 0)

返回:

ka-me
ka
me

最佳答案

在搜索和调整你的问题后,我发现全文搜索有两个主要错误:

  1. 连字符可能被视为断词。它仅返回 | 1 | kayer-meyar | 当我使用 '"ME*"' 时。它不返回 | 2 | KA-ME |。问题是因为您的条件只允许单词开头(而不是 end within a middle) ME + 至少一个字符你可以说“那么它为什么会返回 | 1 | kayer-meyar | 因为字符串 me 就在这个中间词?”。嗯,这是因为全文搜索不将其视为一个单独的单词,而是将其视为两个单独的单词(类似于 kayer meyar ),因此它满足了要求(me*)。同样,在 KA-ME 的情况下,它识别为 KA ME 而不是单个单词,并且它也失败了条件(尽管它以 ME 开头) > 但之后没有多余的字符)
  2. 您是否尝试过重建全文索引? .

现在解决方案是:我已关闭全文搜索查询的非索引字列表使用此查询(我的表名称是 MyTable):

ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF

然后运行您的查询。这次你会得到你想要的结果。 enter image description here

这是我的完整查询:

--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*"')

关于sql-server - SQL Azure CONTAINS 不返回所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38075126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com