【问题标题】:Sql Server 2008 "Contains" search searching for numeric value returns all records with a different number of the same length?Sql Server 2008“包含”搜索搜索数值返回所有具有不同数量的相同长度的记录?
【发布时间】:2018-03-14 19:20:25
【问题描述】:

我有一个搜索,用户可以在其中输入任何值,有时这些值合法地只是数字。 搜索时

Select * FROM Updates WHERE contains(Remarks, '"10010234331"')

它将返回具有相同长度的数字的不相关结果,即上面的一个匹配项是

"PO input differently on orders, refs are: 

1001024894 
10010248940"

如您所见,搜索不是其中任何一个的子字符串。任何想法如何告诉它不只是猜测?

【问题讨论】:

  • 不能用like吗?
  • 我们正在搜索一个带有全文索引的文本字段,要搜索的记录量意味着使用like 的速度非常慢。

标签: sql sql-server contains full-text-indexing


【解决方案1】:

没错。

这听起来令人难以置信,事实证明,如果全文索引“分词器的语言”设置为“英语”以外的任何内容,则全文索引将仅索引 a 的前 5 个数字数字字符串。 这意味着上述内容作为匹配项返回,因为它们都以“10010”开头。

“French、“German”、“Hebrew”,甚至“Neutral”都返回了不正确的结果,只有“English”才返回整个字符串的匹配项。

create table wtFTI( taskid int not null  ,  remarks text, constraint   [PK__wtFTI] primary key(taskid))
insert into wtfti
values(3513792, 'Remarks: 1001019658  was cancelled 26/08')
GO

CREATE FULLTEXT CATALOG [TaskRemarks]WITH ACCENT_SENSITIVITY = OFF

GO

CREATE FULLTEXT INDEX ON [dbo].[wtFTI] KEY INDEX [PK__wtFTI] ON ([TaskRemarks]) WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM)
GO
ALTER FULLTEXT INDEX ON [dbo].[wtFTI] ADD ([remarks]LANGUAGE 'French')
GO
ALTER FULLTEXT INDEX ON [dbo].[wtFTI] ENABLE
GO


Select * FROM [wtFTI] WHERE contains(Remarks, '"1001019000"')

ALTER FULLTEXT INDEX ON [dbo].[wtFTI] DROP ([remarks]) 
GO
ALTER FULLTEXT INDEX ON [dbo].[wtFTI] ADD ([remarks] LANGUAGE 'English')
GO


Select * FROM [wtFTI] WHERE contains(Remarks, '"1001019000"')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 2021-10-03
    相关资源
    最近更新 更多