sql全文检索(full-text)用法与注意事项
本文章来总结了SQL Server全文检索(full-text)用法与注意事项,有需要学习与了解sqlserver全文搜索的朋友可参考本文章。
SQL Server全文搜索 一项强大而又让人无可奈何的技术!说他强大,是因为他的检索速度极快,比like快几十上百倍。说他让人无可奈何,是因为很多场合对准确性要求很高,使用者又不能自己很好的组织查询语句,所以查出来的结果让人觉得没有确定性。
原本觉得这技术很不错,但真正研究起来,发现问题还是很多,研究到最后觉得这技术对柳永法(yongfa365)'Blog来说,只会用到对精确度不高的场合,像:CMS系统,大量文章,根据tag进行快速检索,这时他的快速检索优势能发挥出来,其它地方,真不敢用。像OA,各种业务系统,用他搜索不出要的东西,或者尝试很多次搜索,那用户还不郁闷死。暂且把研究结果放上来,以备后查。
前段时间做了个系统,记录客户的地址,下次再输入类似的地址,系统会进行分词,然后搜索看这个客户是不是已经在我们系统里了。感觉全文搜索能实现这样的功能就好了:就是,根据哪些词索引由用户自己定义(如:朝阳区|海淀区|东城区|左家庄|中关村 等,整个北京的地名,也没多少关键词),只对这些词进行索引,这样一来查询速度会更快,全文目录所占的地方也会更小,不知为何SQL Server没提供这样的功能,也许这只是 个例 吧。
全文查询只需要几秒或更少的时间,具体取决于返回的行数。
可以对包含 char、varchar 和 nvarchar 数据的列创建全文索引。也可以对包含格式化二进制数据(如存储在 varbinary(max) 或 image 列中的 Microsoft Word 文档)的列创建全文索引。不能使用 LIKE 谓词来查询格式化的二进制数据。
创建全文索引 创建全文索引的一个前提是,表中必须有这样的一个索引“unique, single-column, non-nullable index”。大多数情况下,主键都会满足这样的要求。 SQL Server这样做的实际要求是: 1. 必须有非空索引(主键都会满足这样的要求)。 2. 索引必须作用在单独一个列上。复合主键是不满足这个要求,一个work around是可以新建立一列,如textid,int型,自增,并建立索引。 提示:如果你的主键过长,笔者也建议新建一个int型自增列,例如主键是GUID的话,那么创建全文索引开销会是非常巨大的。
最简步骤:(以AdventureWorks数据库中的databaselog表中的event字段为例)
代码如下 | 复制代码 |
1、 启用全文索引: use AdventureWorks exec sp_fulltext_database 'enable' 2、 全文索引是存储在指定的文件系统中的,而不是SQLServer中。 exec sp_fulltext_catalog 'Cat_Desc', 'create', 'f:ft' 创建全文索引的目录 3、 对表创建全文索引 exec sp_fulltext_table 'databaselog', 'create', 'Cat_Desc', 'PK_DatabaseLog_DatabaseLogID' 在已有的表上根据已有的索引创建全文索引 4、 对表中的列添加全文索引 exec sp_fulltext_column 'databaselog', 'event', 'add' 5、 表启动完全填充 exec sp_fulltext_table 'databaselog', 'start_full' 6、 执行全文检索 select * from freetexttable(databaselog, event,'ALTER_TABLE'); |
注意事项:
•为了让全文搜索更好的运行,请选用nvarchar,放弃使用varchar 原因见:SQL Server全文搜索关于varchar与nvarchar的问题
•全文搜索不适合对精准度要求很高的场合,如,查找"show.aspx?id=",是查不出来的,推荐使用SQL Server CLR, 教程:SQL Server CLR 极速入门,启用、设计、部署、运行
•全文搜索最好是配合分词组件工作,分词后再使用全文搜索查找,分词组件见:盘古分词
操作:
1.确保服务已启用:在"SQL Server 配置管理器"里设置"SQL Server FullText Search"启动状态为"自动"
2.建全文索引最直观的方法是:右击相关表-->全文索引-->定义全文索引-->然后基本上是下一步就完成了。
最常用语法:
代码如下 | 复制代码 |
SELECT * FROM [test] WHERE CONTAINS(UserName,'柳永法'); |
SQL Server全文搜索关于varchar与nvarchar的问题
SQL Server全文搜索有一个问题,就是记录不全,上周末经过分析发现,
1.字段类型是varchar 且 如果搜索的的词正好是文章的结尾,就搜索不到,解决方法是在他后边再加上一个.让他不是在文章最后就行
2.字段类型换成nvarchar后,问题解决
代码如下 | 复制代码 |
CREATE DATABASE test USE test |
--对test表建全文索引,列选择txtTitle1, txtTitle2。方法如下:
--右击要建全文索引的表-->全文索引-->定义全文索引-->点几下"下一步"直到“选择表列”
-->选中要建立全文索引的列-->下一步-->自动-->创建新目录(写上名称,选位置,其它自便)
-->点几下"下一步"直到完成,这时系统会开始建全文目录,建好没有可以在当前数据库所在:
--展开当前数据库-->存储-->全文目录-->右击,你刚才起的名,如果“重新生成”是灰色,
--说明系统当前正在生成,如果可以点,说明生成完了
代码如下 | 复制代码 |
--针对varchar的列txtTitle1 只要查询里是以 '法' 结尾,都查不出记录来 --在txttitle列末尾随便加一个字符 |
--重建索引后,再执行上面的查询,结果都 是50
--通过以上示例得出结论:只要在设计字段时把varchar改成nvarchar,就可以解决我们的问题,且nvarchar有个好处就是:如果数据库服务器部署在非中文的系统上时,不会出现乱码问题。
详细的全文搜索参考http://msdn.microsoft.com/zh-cn/library/ms142571(v=SQL.100).aspx
全文检索很容易建立,一旦建立,快速的响应将给使用者和用户带来惊喜!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java 개발: 검색 엔진 및 전체 텍스트 검색 기능을 구현하는 방법, 특정 코드 예제가 필요합니다. 검색 엔진 및 전체 텍스트 검색은 현대 인터넷 시대에 중요한 기능입니다. 사용자가 원하는 것을 빠르게 찾을 수 있도록 도울 뿐만 아니라 웹사이트와 앱에 대한 더 나은 사용자 경험을 제공합니다. 이 기사에서는 Java를 사용하여 검색 엔진 및 전체 텍스트 검색 기능을 개발하는 방법을 소개하고 몇 가지 구체적인 코드 예제를 제공합니다. Lucene 라이브러리를 사용한 전체 텍스트 검색 Lucene은 ApacheSo에서 개발한 오픈 소스 전체 텍스트 검색 엔진 라이브러리입니다.

인터넷 시대의 도래와 함께 전문 검색 엔진이 점점 더 주목을 받고 있습니다. 수많은 웹 페이지, 문서, 데이터 중에서 필요한 콘텐츠를 빠르게 찾아야 하며, 이를 위해서는 효율적인 전체 텍스트 검색 엔진을 사용해야 합니다. Go 언어는 효율성으로 유명한 프로그래밍 언어입니다. 디자인 목표는 코드 실행 효율성과 성능을 향상시키는 것입니다. 따라서 Go 언어를 사용하여 전체 텍스트 검색 엔진을 작성하면 운영 효율성과 성능을 크게 향상시킬 수 있습니다. 이 기사에서는 Go 언어를 사용하여 고성능 전체 텍스트 검색 엔진을 작성하는 방법을 소개합니다. 1. 전체 텍스트 검색 엔진 이해

인터넷의 발달로 기업은 점점 더 많은 양의 텍스트 데이터에 직면해 있습니다. 관련 콘텐츠를 어떻게 빠르고 정확하게 검색하는가는 정보분야 기업의 중요한 이슈 중 하나가 되었습니다. Lucene을 기반으로 하는 오픈 소스 검색 엔진인 Elasticsearch는 고가용성, 높은 확장성 및 빠른 검색이라는 특징을 갖고 있어 기업 전체 텍스트 검색에 선호되는 솔루션 중 하나입니다. 널리 사용되는 서버 측 프로그래밍 언어인 PHP는 웹 개발 및 API 개발도 빠르게 수행할 수 있어 Elasticsea와 파트너가 됩니다.

최신 웹 애플리케이션에서는 데이터 양이 증가하고 있지만 사용자 기대치와 데이터에 대한 액세스도 증가하고 있습니다. 따라서 사용자 기대를 충족하고 더 나은 사용자 경험을 제공하기 위해 검색 기술이 점점 더 중요해지고 있습니다. 전체 텍스트 검색은 대량의 데이터를 빠르게 색인화하고, 검색하고, 정렬할 수 있는 강력한 기술입니다. 이러한 측면에서 Elasticsearch는 고가용성, 손쉬운 확장성 및 기타 장점은 물론 다양한 고급 기능을 제공하는 선도적인 오픈 소스 검색 엔진입니다. 이번 글에서는 사용법을 소개하겠습니다.

PHP 학습 가이드: 전체 텍스트 검색 기능을 구현하는 방법 전체 텍스트 검색 기능은 최신 웹사이트와 애플리케이션에서 널리 사용되며, 이를 통해 사용자는 키워드로 관련 콘텐츠를 검색하고 검색할 수 있습니다. 이 기사에서는 PHP를 사용하여 전체 텍스트 검색 기능을 구현하는 방법에 대해 설명합니다. 1. 준비 코드 작성을 시작하기 전에 Elasticsearch가 서버에 설치되어 있는지 확인해야 합니다. Elasticsearch는 전체 텍스트 검색 및 분석을 위한 오픈 소스 서버 측 도구로, 강력한 검색 엔진을 제공합니다.

PHP는 실시간 채팅 기능을 위한 전체 텍스트 검색 및 메시지 검색 기술을 개발합니다. 인스턴트 메시징의 인기와 애플리케이션의 확장으로 인해 실시간 채팅 기능은 많은 웹사이트와 애플리케이션의 필수 기능이 되었습니다. 라이브 채팅에서 사용자는 메시지를 주고받을 수 있으며, 사용자는 기록 메시지를 검색하여 검토하고 찾을 수 있습니다. 이 기능을 달성하기 위해 전체 텍스트 검색 및 메시지 검색 기술을 사용할 수 있습니다. 전문 검색이란 많은 양의 텍스트에서 키워드를 빠르게 검색하는 기술을 말합니다. 메시지 검색의 효율성과 정확성을 효과적으로 향상시킬 수 있습니다. PHP 개발에서 우리는

PHP를 사용하여 Baidu Wenxin Yiyan API 인터페이스의 전체 텍스트 검색 및 키워드 필터링을 개발하고 구현합니다. 웹 애플리케이션을 개발할 때 더 많은 기능과 서비스를 제공하기 위해 타사 API를 프로젝트에 통합해야 하는 경우가 많습니다. 이 기사에서는 PHP를 사용하여 Baidu Wenxinyiyan API 인터페이스의 전체 텍스트 검색 및 키워드 필터링 기능을 개발하고 구현하는 방법을 소개합니다. Baidu Wenxin Yiyan은 다양한 카테고리의 문장을 제공하는 API 인터페이스로, 키워드를 기반으로 전체 텍스트 검색을 수행하고 반환된 결과를 키워드로 필터링할 수 있습니다. 처음에 우리는

PHP가 MongoDB를 사용하여 전체 텍스트 검색을 구현하는 방법 개요: 전체 텍스트 검색은 텍스트 데이터의 키워드나 구문을 기반으로 검색하는 기술을 의미합니다. 기존 관계형 데이터베이스에서 전체 텍스트 검색은 일반적으로 복잡한 SQL 쿼리문에 의존하지만 MongoDB를 사용하면 전체 텍스트 검색 기능을 보다 편리하고 효율적으로 구현할 수 있습니다. 이 기사에서는 PHP와 MongoDB를 사용하여 전체 텍스트 검색 기능을 구현하는 방법을 소개하고 코드 예제를 제공합니다. MongoDB 확장 설치: 시작하기 전에 먼저 MongoDB를 설치해야 합니다.
