gpt4 book ai didi

sql - 全文搜索 CONTAINSTABLE

转载 作者:行者123 更新时间:2023-12-04 10:54:55 30 4
gpt4 key购买 nike

我有一个包含很多字段的表。为了搜索此表中的信息,我使用全文搜索。当我尝试查找电话号码或 Skype 名称字段中存在三个零的行时,我也使用正确的记录获取包含一些带点和数字的字符串的记录(例如 string.87)

我在下面使用查询

DECLARE @SearchCondition nvarchar(100) = '"000*"'

SELECT e.Id, e.FirstName, e.LastName, e.PhoneNumber, e.SkypeName
FROM dbo.Employee e
INNER JOIN CONTAINSTABLE([dbo].[Employee], *, @SearchCondition, Language 0) as fti ON e.Id = fti.[KEY]

我得到以下结果:

Id  FirstName   LastName     PhoneNumber    SkypeName
14 name1 name1 3903749282 000skypename
20 name90 name.90 3906773464 skypename_str
21 name2 name2 3906769539 skypename.87

有办法解决吗?谢谢!

最佳答案

你可以看到你的搜索词在分词完成后的样子:

SELECT display_term FROM sys.dm_fts_parser('"000*"', 0, NULL, 0);

获取:

000
nn0

(有关文档,请参阅 http://msdn.microsoft.com/en-us/library/cc280463.aspx。)

第二项 0 是您为分词器指定的语言。您指定的是中性分词系统,它似乎对多个零进行四舍五入。

将其更改为英语 (1033):

SELECT display_term FROM sys.dm_fts_parser('"000*"', 1033, NULL, 0);

...使查询执行您想要的操作,但您可能出于其他原因使用语言 0。如果您未在 CONTAINSTABLE 中指定语言,它将使用列被索引的语言。

CONTAINSTABLE([dbo].[Employee], *, @SearchCondition)

..为你工作?

编辑

玩了一会儿之后,中性分词系统似乎也在尝试以科学记数法查找数字参数:

SELECT * FROM sys.dm_fts_parser('850000000000000', 0, NULL, 0);

850000000000000
nn8d5e+014

关于sql - 全文搜索 CONTAINSTABLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9129316/

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