当前位置:首页 » 编程语言 » sql全文搜索

sql全文搜索

发布时间: 2022-02-28 04:12:59

sql server 全文搜索的结果要比用like查询出来的结果少,这是怎么回事

你的like是怎么写的?
like '%xxxx%'和like 'xxxx%'的结果有可能是不同的。

㈡ sql中全文检索的具体细节

全文索引和全文检索是sql server 7.0的新增功能,它能够对数据中的字符类型列(如varchar、text等类型列)进行索
引,并通过索引实现全文搜索查询。sql server常规索引与全文检索相比,二者的区别如下:

常规索引 全文索引
使用create index或约束定义创建 使用全文索引存储过程创建和删除
通过删除或执行drop index语句删除

当插入、修改或删除数据时,sql server 只能通过任务调度或执行存储过
能够自动更新常规索引内容 程来填充全文索引

每个表可以建立多个常规索引 每个表只能有一个全文索引
索引不能分组 同一个数据库中的多个全文索引可
以组织为一个全文目录
常规索引存储在数据库文件中 全文索引存储在文件系统中

为了支持全文索引操作,sql server 7.0新增了一些新存储过程和transact-sql语句,使用这些存储过程创建全文索引的
具本步骤为(括号内为每步所调用的存储过程名称):

(1)启动数据库的全文处理功能(sp_fulltext_datebase);
(2)建立全文目录(sp_fulltext_catalog);
(3)在全文目录中注册需要全文索引的表(sp_fulltext_table);
(4)指出表中需要全文检索的列名(sp_fulltext_column)
(5)为表创建全文索引(sp_fulltext_table);
(6)填充全文索引(sp_fulltext_catalog)。

例:
use pubs
go
exec sp_fulltext_database 'enable'
--为titles表建立全文索引数据元,其中create为建立,activate为激活,deactivate为关闭表全文索引的激活状态,使
它不再参加全文目录填充,drop为删除;create参数中,后面跟的是全文目录名称和索引列名。
--下面语句为pubs数据库中的titles表创建全文索引数据元,存储该数据元的全文目录为FT_pubs,所使用的唯一索引为
UPKCL_titleidind(title表中为title_id列的PRIMARY KEY约束所建立的唯中索引)
sp_fulltext_table titles,'create','FT_pubs','upkcl_titledind'

--激活它
sp_fulltext_table titles,'activate'

--指定参加全文索引的列
sp_fulltext_column 'titles','title','add'
sp_fulltext_column 'titles','notes','add'

下面是一个完整的例子:
--在执行该脚本程序之前启动sql server的全文搜索服务,即microsoft search服务
use pubs --打开数据库
go
--检查pubs是否支持全文索引,如果不支持全文索引,则使用sp_fulltext_datebase打开该功能
if (select databaseproperty ('pubs','IsFulltextEnables'))=0
execute sp_fulltext_database 'enable'
--建立全文目录FT_pubs
execute sp_fulltext_catalog 'FT_pubs','create'
--为titles表建立全文索引数据元
execute sp_fulltext_table 'titles','FT_pubs','UPKCL_titleidind'
--设置全文索引列名
execute sp_fulltext_column 'titles','title','add'
execute sp_fulltext_column 'titles','notes','add'
--建立全文索引
execute sp_fulltext_table 'FT_pubs','activate'
--填充全文索引目录
execute sp_fulltext_catalog 'FT_pubs','start_full'
GO
--检查全文目录填充情况
WHILE FulltextCatalogProperty("FT_pubs','PopulateStatus')<>0
BEGIN
--如果全文目录正处于填充状态,则等待30秒后再检测一次
WAITFOR DELAY ‘0:0:30’
END
--全文目录填充完成后,使用全文目录检索

--查询title列或notes列中包含有database或computer字符串的图书名称
SELECT title
FROM title
where CONTAINTS(title,'database')
or contains(notes,'database')
or contains(title,'computer')
or contains(notes,'computer')

㈢ 建立全文检索的sql语句

前言:微软的SQL Server数据库是一个在中低端企业应用中占有广泛市场的关系型数据库系统,它以简单、方便、易用等特性深得众多软件开发人员和数据库管理人员的钟爱。但SQL Server 7.0以前的数据库系统由于没有全文检索功能,致使无法提供像文本内容查找此类的服务,成为一个小小的遗憾。从SQL Server 7.0起,到如今的SQL Server 2000终于具备了全文检索功能,使用户可以高效地检索存储在数据库char、varchar、text、ntext、nchar、nvarchar等数据类型列中的文本数据。
建立全文索引
在进行全文检索之前,必须先建立和填充数据库全文索引。为了支持全文索引操作,SQL Server 7.0新增了一些存储过程和Transact-SQL语句。使用这些存储过程创建全文索引的具体步骤如下(括号内为调用的存储过程名称):
1. 启动数据库的全文处理功能(sp_fulltext_
database);;
2. 建立全文检索目录(sp_fulltext_catalog);
3.在全文检索目录中注册需要全文索引的表(sp_fulltext_table);
4. 指出表中需要全文检索的列名(sp_fulltext_
column);;
5. 为表创建全文索引(sp_fulltext_table);;
6. 填充全文检索目录(sp_fulltext_catalog)。
下面举例说明如何创建全文索引,在本例中,对Test数据库Book表中Title列和Notes列建立全文索引。
use test //打开数据库
//打开全文索引支持,启动SQL Server的全文搜索服务
execute sp_fulltext_database ‘enable’
//建立全文检索目录ft_test
execute sp_fulltext_catalog ‘ft_test’, ‘create’
为Title列建立全文索引数据元,pk_title为Book表中由主键所建立的唯一索引,这个参数是必需的。
execute sp_fulltext_table ‘book’,‘create’, ‘ft_test’,‘pk_title’
//设置全文索引列名
execute sp_fulltext_column ‘book’, ‘title’, ‘add’
execute sp_fulltext_column ‘book’,‘notes’, ‘add’
//建立全文索引
execute sp_fulltext_table ‘book’, ‘activate’
//填充全文索引目录
execute sp_fulltext_catalog ‘ft_test’, ‘start_full’
至此,全文索引建立完毕。
进行全文检索
SQL Server 2000提供的全文检索语句主要有CONTAINS和FREETEXT。CONTAINS语句的功能是在表的所有列或指定列中搜索:一个字或短语;一个字或短语的前缀;与一个字相近的另一个字;一个字的派生字;一个重复出现的字。
CONTAINS语句的语法格式为:
CONTAINS({column | *}), <contains_search_condition> )
其中,column是搜索列,使用“*”时说明对表中所有全文索引列进行搜索。Contains_search_
condition 说明CONTAINS语句的搜索内容,其语法格式为:
{||||}[{{AND|AND NOT|OR}}] [...n]
下面就simple_term和prefix_term参数做简要说明:
simple_term是CONTAINS语句所搜索的单字或短语,当搜索的是一个短语时,必须使用双引号作为定界符。其格式为:
{‘word’|“ phrase”}
prefix_term说明CONTAINS语句所搜索的字或短语前缀,其格式为:
{“word*” | “phrase*”}
例如,下面语句检索Book表的Title列和Notes列中包含“database”或“computer”字符串的图书名称及其注释信息:
select title, notes
from book
where contains(tilte, ‘database’) or contains(notes,‘database’)
or contains(title,‘computer’) or contains(notes,‘computer’)
FREETEXT语句的功能是在一个表的所有列或指定列中搜索一个自由文本格式的字符串,并返回与该字符串匹配的数据行。所以,FREETEXT语句所执行的功能又称做自由式全文查询。
FREETEXT语句的语法格式为:FREETEXT({column | * },‘freetext_string’)
其中,column是被搜索列,使用“*”时说明对表中的所有全文索引列进行搜索。Freetext_string参数指出所搜索的自由文本格式字符串。
例如,下面语句使用FREETEXT语句搜索Book表中包含“Successful Life”字符串的数据行:
select title, notes
from book
where freetext(*,‘Successful Life’)

㈣ sqlserver有自带的全文检索

有自带的全文检索,主要功能是在指定列上创建全文检索索引,然后可以基于关键字查询该列内容。
在where语句后面用CONTAINS(列名,value)这个函数就可以,没有索引的话应该就是扫描的方式执行。

㈤ SQL中全文搜索怎么提高效率

很多互联网应用程序都提供了全文搜索功能,用户可以使用一个词或者词语片断作为查询项目来定位匹配的记录。在后台,这些程序使用在一个SELECT查询中的LIKE语句来执行这种查询,尽管这种方法可行,但对于全文查找而言,这是一种效率极端低下的方法,尤其在处理大量数据的时候。
1、建立索引
2、where条件定位
3、具体选择所要的字段等等

或者使用存储过程或视图等来提高效率

㈥ sql 全文搜索 怎么分词的

全文索引的核心理念是倒排索引(即反向索引),而最大的技术难点就在于分词。


英文的分词很简单,直接按空格分词即可。但中文不能这么干,主要原因有两点:

  1. 中文词与词之间没有空格

  2. 中文分词结果存在歧义。例如:周立波/小人/傻逼 和 周立/波小/人傻逼,两种分词都说得通,只有结合上下文才知道哪一种对

因此,中文分词比英文分词要困难得多,学术界在这一领域已经研究了多年,并取得了很多研究成果,但目前,中文分词的技术仍然很不完善。


回到全文搜索的话题,sql server自带的中文分词应该是基于正向最大匹配法的,说实话效果并不好。要求不高的话可以凑活用。除此之外,也有一些开源或商业的项目,例如Lucene(及其后续衍生),盘古等等,比sql server自带的要强。但这些项目也有问题:一是分词效果难称完美,二是在数据库中使用比较麻烦。


以上全部手打。有什么问题请继续问。

㈦ sqlserver 全文检索

select * from 表名 where contains(城市,'"北*京"')

contains通配符是*,不过分词字典里不一定有“北 京”这个词,所以容易导致查不出来select * from 表名 where contains(城市,'"北"') and contains(城市,'"京"')

㈧ SQL Server 全文搜索 通配符问题

select * from test where contains(*, '"*北*" or "*南*"')
*北* *南*

㈨ sql全文搜索。

全文索引的模糊查询是*吧

㈩ sql server 2008 contains 全文搜索的问题

contains是完全匹配的字符,freetext是只要包含该字符的就可以。
英文中就比较明显,比如搜索‘textbook’
用contains(*, 'text') 不会拿到结果,用freetext(*, 'text')就可以。
至于你遇到的情况,可能是由于对中文支持不够友好。

你试下freetext看怎样

热点内容
文件存储中的日期 发布:2025-07-15 05:57:00 浏览:671
python基础教程源码 发布:2025-07-15 05:56:18 浏览:247
php接受xml 发布:2025-07-15 05:51:04 浏览:927
机顶盒怎么看密码 发布:2025-07-15 05:46:48 浏览:921
电脑配置低怎么变得不卡 发布:2025-07-15 05:34:08 浏览:844
ios火影忍者手游脚本 发布:2025-07-15 05:31:34 浏览:82
iphone支付密码忘了怎么办 发布:2025-07-15 05:30:55 浏览:775
c语言打开网页 发布:2025-07-15 05:21:33 浏览:640
如何制作我的世界模组服务器 发布:2025-07-15 05:21:33 浏览:903
phparray加 发布:2025-07-15 05:20:41 浏览:782