SQL 服务器 ContainsTable 未返回包含以 "N" 开头的单词的结果
SQL Server ContainsTable not returning result with word that start with "N"
我想查询以使用 NEAR 语法检索人员。当我搜索第二个单词中包含字母 N 的任何文本时,结果始终为空。
我有两个人 Ricardo 在 table、"Ricardo Mova" 和 "Ricardo Nova" 上注册。如果搜索 'Ricardo NEAR "Mova*"' 没问题,但不是 'Ricardo NEAR 'Nova*'
编辑
- 4 条记录(Ricardo Nova、Ricardo Novais、Ricardo Novo、Ricardo Nunes)
- 查询'Ricardo NEAR 'N*'
- 结果仅显示 "Ricardo Novais" 和 "Ricardo Nunes"。
Table:
CREATE TABLE [dbo].[EntitySearch](
[IdEntity] [int] NOT NULL,
[Name] [nvarchar](max) NULL,
[Accessibility] [bit] NOT NULL,
[Document] [nvarchar](max) NULL,
[Email] [nvarchar](max) NULL,
[Phone] [nvarchar](max) NULL,
[Phone2] [nvarchar](max) NULL,
[Birthdate] [datetime] NULL,
[Gender] [int] NULL,
[IsAct] [bit] NOT NULL,
[Discriminator] [int] NOT NULL,
CONSTRAINT [PK_dbo.EntitySearch] PRIMARY KEY CLUSTERED
(
[IdEntity] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
目录
CREATE FULLTEXT CATALOG main_catalog;
完整索引
CREATE FULLTEXT INDEX ON dbo.EntitySearch
( [Name]
Language[Brazilian],
[Document]
Language[Brazilian],
[Email]
Language[Brazilian],
[Phone]
Language[Brazilian],
[Phone2]
Language[Brazilian] )
KEY INDEX [PK_dbo.EntitySearch] ON main_catalog;
查询:
SELECT top 10
FT_TBL.[IdEntity]
,FT_TBL.[Name]
,FT_TBL.[Accessibility]
,FT_TBL.[Document]
,FT_TBL.[Email]
,FT_TBL.[Phone]
,FT_TBL.[Phone2]
,FT_TBL.[Birthdate]
,FT_TBL.[Gender]
,FT_TBL.[IsAct]
,FT_TBL.[Discriminator]
FROM [EntitySearch] AS FT_TBL INNER JOIN
CONTAINSTABLE ([EntitySearch], [Name], 'Ricardo NEAR "Nova*"' ) AS KEY_TBL
ON FT_TBL.[IdEntity] = KEY_TBL.[KEY]
WHERE
FT_TBL.[IsAct] = 1
and FT_TBL.[Discriminator] = 2
and KEY_TBL.RANK > 10
ORDER BY KEY_TBL.RANK DESC, FT_TBL.[Name]
我希望显示 1 条记录,但显示 none。谢谢!
编辑:解决方法
我用葡萄牙语删除并重新编制了全文索引。问题已经解决,所以我猜 "bug" 是巴西语索引。
这不是BUG。
每种语言都有自己的停用词列表,这意味着有些词与索引搜索无关。
SELECT *
FROM sys.fulltext_system_stopwords
WHERE language_id = 1046 --Brazilian language ID
所以,就我而言,我做了一个算法,在发送之前更正搜索查询。
我想查询以使用 NEAR 语法检索人员。当我搜索第二个单词中包含字母 N 的任何文本时,结果始终为空。
我有两个人 Ricardo 在 table、"Ricardo Mova" 和 "Ricardo Nova" 上注册。如果搜索 'Ricardo NEAR "Mova*"' 没问题,但不是 'Ricardo NEAR 'Nova*'
编辑
- 4 条记录(Ricardo Nova、Ricardo Novais、Ricardo Novo、Ricardo Nunes)
- 查询'Ricardo NEAR 'N*'
- 结果仅显示 "Ricardo Novais" 和 "Ricardo Nunes"。
Table:
CREATE TABLE [dbo].[EntitySearch](
[IdEntity] [int] NOT NULL,
[Name] [nvarchar](max) NULL,
[Accessibility] [bit] NOT NULL,
[Document] [nvarchar](max) NULL,
[Email] [nvarchar](max) NULL,
[Phone] [nvarchar](max) NULL,
[Phone2] [nvarchar](max) NULL,
[Birthdate] [datetime] NULL,
[Gender] [int] NULL,
[IsAct] [bit] NOT NULL,
[Discriminator] [int] NOT NULL,
CONSTRAINT [PK_dbo.EntitySearch] PRIMARY KEY CLUSTERED
(
[IdEntity] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
目录
CREATE FULLTEXT CATALOG main_catalog;
完整索引
CREATE FULLTEXT INDEX ON dbo.EntitySearch
( [Name]
Language[Brazilian],
[Document]
Language[Brazilian],
[Email]
Language[Brazilian],
[Phone]
Language[Brazilian],
[Phone2]
Language[Brazilian] )
KEY INDEX [PK_dbo.EntitySearch] ON main_catalog;
查询:
SELECT top 10
FT_TBL.[IdEntity]
,FT_TBL.[Name]
,FT_TBL.[Accessibility]
,FT_TBL.[Document]
,FT_TBL.[Email]
,FT_TBL.[Phone]
,FT_TBL.[Phone2]
,FT_TBL.[Birthdate]
,FT_TBL.[Gender]
,FT_TBL.[IsAct]
,FT_TBL.[Discriminator]
FROM [EntitySearch] AS FT_TBL INNER JOIN
CONTAINSTABLE ([EntitySearch], [Name], 'Ricardo NEAR "Nova*"' ) AS KEY_TBL
ON FT_TBL.[IdEntity] = KEY_TBL.[KEY]
WHERE
FT_TBL.[IsAct] = 1
and FT_TBL.[Discriminator] = 2
and KEY_TBL.RANK > 10
ORDER BY KEY_TBL.RANK DESC, FT_TBL.[Name]
我希望显示 1 条记录,但显示 none。谢谢!
编辑:解决方法
我用葡萄牙语删除并重新编制了全文索引。问题已经解决,所以我猜 "bug" 是巴西语索引。
这不是BUG。
每种语言都有自己的停用词列表,这意味着有些词与索引搜索无关。
SELECT *
FROM sys.fulltext_system_stopwords
WHERE language_id = 1046 --Brazilian language ID
所以,就我而言,我做了一个算法,在发送之前更正搜索查询。