当前位置: 代码网 > it编程>数据库>MsSqlserver > SqlServer创建全文索引的详细步骤

SqlServer创建全文索引的详细步骤

2026年02月13日 MsSqlserver 我要评论
✅ 一、sql server 全文索引创建步骤(完整可执行)1.1 前置检查(必须通过)全文索引不是默认功能,很多开发环境根本没装。请先在 ssms 执行以下命令验证:-- 检查1:全文搜索组件是否已

✅ 一、sql server 全文索引创建步骤(完整可执行)

1.1 前置检查(必须通过)

全文索引不是默认功能,很多开发环境根本没装。 请先在 ssms 执行以下命令验证:

-- 检查1:全文搜索组件是否已安装
select serverproperty('isfulltextinstalled') as isfulltextinstalled;
  • 返回值 = 1:继续下一步
  • 返回值 = 0必须找dba安装全文组件(sql server安装介质修复,添加“全文和语义提取搜索”功能)

1.2 为当前数据库启用全文索引

exec sp_fulltext_database 'enable';

注意:该命令并非所有sql server版本必须,但执行无害。若报错“已启用”,忽略即可 

1.3 创建全文目录(容器)

create fulltext catalog ft_catalog_logrequest 
with accent_sensitivity = off;
  • accent_sensitivity = off:匹配时忽略重音(对中文无影响,推荐)
  • 如果只需要一个默认目录,可执行 create fulltext catalog ft_catalog_logrequest as default;

1.4 在目标表上创建全文索引——这是你的核心需求

create fulltext index on dbo.logrequests
(
    paramjson          -- 你要高速检索的大字段
        language 2052, -- 2052 = 简体中文。必须指定!否则中文分词失效
    apimethod,         -- (可选)其他需要全文检索的字段
    syscode            -- (可选)
)
key index pk_logrequests   -- 表的主键名,必须单列、唯一、非空
on ft_catalog_logrequest   -- 全文目录名,使用上一步创建的
with 
(
    change_tracking auto,      -- 自动跟踪数据变更(推荐)
    -- 或:change_tracking manual, 手动更新;stoplist = system   -- 使用系统停用词表
);

关于 language 2052 的严重性:
如果不指定 language 2052,sql server 会使用默认语言(通常是英语)。英文分词器按空格分词,会把“托盘条码”整个当成一个词,根本无法匹配你输入的关键词,导致全文索引建了也白建 

1.5 首次填充索引(立即生效)

alter fulltext index on dbo.logrequests start full population;
  • 数据量大时此操作消耗i/o,建议在业务低峰期执行。
  • 执行期间,已有数据的检索功能不可用,但表本身的增删改查不受影响。

✅ 二、创建完成后的验证与查询

2.1 验证索引是否创建成功

-- 查看该表上的全文索引
select * from sys.fulltext_indexes 
where object_id = object_id('dbo.logrequests');
-- 查看全文目录下的所有索引
select * from sys.fulltext_catalogs;

2.2 正确使用全文检索(严禁再用like)

错误用法(全表扫描)

select * from logrequests where paramjson like '%托盘条码123%';

正确用法(秒级响应)

-- 精确匹配关键词
select id, apimethod, requesttime 
from logrequests 
where contains(paramjson, '托盘条码123');
-- 多个关键词(and关系)
select id, apimethod, requesttime 
from logrequests 
where contains(paramjson, '托盘 and 条码');
-- 短语匹配(完全包含)
select id, apimethod, requesttime 
from logrequests 
where contains(paramjson, '"托盘条码123"');
-- 同时检索多个字段
select id, apimethod, requesttime 
from logrequests 
where contains((paramjson, apimethod), '托盘');

到此这篇关于sqlserver创建全文索引的详细步骤的文章就介绍到这了,更多相关sqlserver创建全文索引内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com