基于sql-server 的全文检索
来源:互联网 发布:布列斯特和约 知乎 编辑:程序博客网 时间:2024/06/05 05:57
/*
[搜索引擎-使用表变量]
版 本:2.0
最后修改:2007-1-10
*/
CREATE PROCEDURE [dbo].[Search_Engine]
@Pagesize int, --接收每页显示的多少数据
@Pageindex int, --接收当前显示的页码
@Docount bit, --判断是否是第一次接收数据,第一次接收时统计数据总数,否则不统计。
@search_title1 varchar(20), --接收第一个搜索关键字
@search_title2 varchar(20), --接收第二个搜索关键字
@search_title3 varchar(20), --接受第三个搜索关键字
@search_number int --设定传入几个值
AS
DECLARE
@PageLowerBound int,
@PageUpperBound int
DECLARE
@indextable table(id int identity(1,1),nid int)
BEGIN
/*当传为值为1时运行下列(开始)*/
IF @search_number=1
BEGIN
CREATE TABLE #temp_search1 (ID int PRIMARY KEY IDENTITY (1,1) NOT NULL,Search_Id int);
INSERT INTO #temp_search1(Search_Id)
SELECT id from [business_info2] where contains(medicine_name,@search_title1) order by id desc
INSERT INTO #temp_search1(Search_Id)
SELECT id from [business_info2] where contains(medicine_type,@search_title1) order by id desc
INSERT INTO #temp_search1(Search_Id)
SELECT id from [business_info2] where contains(*, @search_title1) order by id desc
CREATE TABLE #search_table1 (ID int PRIMARY KEY IDENTITY (1,1) NOT NULL,Search_Id int,Medicine_Name nvarchar(200),Medicine_Type nvarchar(200),Company_Name nvarchar(200),Product_capability ntext);
INSERT INTO #search_table1(Search_Id,Medicine_Name,Medicine_Type,Company_Name,Product_capability)
SELECT id,Medicine_Name,Medicine_Type,Company_Name,Product_capability from [business_info2] where Id in (select top 500 Search_Id from #temp_search1 order by id asc)
/*分页存储过程开始*/
IF(@Docount=1)
Select Count(Id) From #temp_search1
ELSE
BEGIN
Set @PageLowerBound=(@pageindex-1)*@pagesize
Set @PageUpperBound=@PageLowerBound+@pagesize
Set rowcount @PageUpperBound
INSERT INTO @indextable(nid) select Id from #search_table1 order by Id asc
Select TOP 500 O.* From #search_table1 O,@indextable T where O.Id=T.nid and T.id>@PageLowerBound and T.id<=@PageUpperBound order by T.id
END
/*分页存储过程结束*/
END
/*当传为值为3时运行下列(结束)*/
/*当传为值为2时运行下列(开始)*/
IF @search_number=2
BEGIN
DECLARE @all_word nvarchar(50)
SET @all_word='"'+@search_title1+'" near "'+@search_title2+'"'
CREATE TABLE #temp_search2 (ID int PRIMARY KEY IDENTITY (1,1) NOT NULL,Search_Id int);
INSERT INTO #temp_search2(Search_Id)
SELECT id from [business_info2] where contains(medicine_name,@all_word) order by id desc
INSERT INTO #temp_search2(Search_Id)
SELECT id from [business_info2] where contains(medicine_type,@all_word) order by id desc
INSERT INTO #temp_search2(Search_Id)
SELECT id from [business_info2] where contains(medicine_name,@search_title1) order by id desc
INSERT INTO #temp_search2(Search_Id)
SELECT id from [business_info2] where contains(medicine_name,@search_title2) order by id desc
INSERT INTO #temp_search2(Search_Id)
SELECT id from [business_info2] where contains(medicine_type,@search_title1) order by id desc
INSERT INTO #temp_search2(Search_Id)
SELECT id from [business_info2] where contains(medicine_type,@search_title2) order by id desc
INSERT INTO #temp_search2(Search_Id)
SELECT id from [business_info2] where contains(*,@all_word) order by id desc
CREATE TABLE #search_table2 (ID int PRIMARY KEY IDENTITY (1,1) NOT NULL,Search_Id int,Medicine_Name nvarchar(200),Medicine_Type nvarchar(200),Company_Name nvarchar(200),Product_capability ntext);
INSERT INTO #search_table2(Search_Id,Medicine_Name,Medicine_Type,Company_Name,Product_capability)
SELECT id,Medicine_Name,Medicine_Type,Company_Name,Product_capability from [business_info2] where Id in (select top 500 Search_Id from #temp_search2 order by id asc)
/*分页存储过程开始*/
IF(@Docount=1)
Select Count(Id) From #temp_search2
ELSE
BEGIN
Set @PageLowerBound=(@pageindex-1)*@pagesize
Set @PageUpperBound=@PageLowerBound+@pagesize
Set rowcount @PageUpperBound
INSERT INTO @indextable(nid) select Id from #search_table2 order by Id asc
Select TOP 500 O.* From #search_table2 O,@indextable T where O.Id=T.nid and T.id>@PageLowerBound and T.id<=@PageUpperBound order by T.id
END
/*分页存储过程结束*/
END
/*当传为值为2时运行下列(结束)*/
/*当传为值为3时运行下列(开始)*/
IF @search_number=3
BEGIN
DECLARE @all_word1 nvarchar(50)
DECLARE @all_word2 nvarchar(50)
DECLARE @all_word3 nvarchar(50)
DECLARE @all_word4 nvarchar(50)
SET @all_word1='"'+@search_title1+'" near "'+@search_title2+'" near "'+@search_title3+'"'
SET @all_word2='"'+@search_title1+'" near "'+@search_title2+'"'
SET @all_word3='"'+@search_title2+'" near "'+@search_title3+'"'
SET @all_word4='"'+@search_title1+'" near "'+@search_title3+'"'
CREATE TABLE #temp_search3 (ID int PRIMARY KEY IDENTITY (1,1) NOT NULL,Search_Id int);
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_name,@all_word1) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_type,@all_word1) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_name,@all_word2) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_name,@all_word3) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_name,@all_word4) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_type,@all_word2) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_type,@all_word3) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_type,@all_word4) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_name,@search_title1) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_name,@search_title2) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_name,@search_title3) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_type,@search_title1) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_type,@search_title2) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(medicine_type,@search_title3) order by id desc
INSERT INTO #temp_search3(Search_Id)
SELECT id from [business_info2] where contains(*,@all_word1) order by id desc
CREATE TABLE #search_table3 (ID int PRIMARY KEY IDENTITY (1,1) NOT NULL,Search_Id int,Medicine_Name nvarchar(200),Medicine_Type nvarchar(200),Company_Name nvarchar(200),Product_capability ntext);
INSERT INTO #search_table3(Search_Id,Medicine_Name,Medicine_Type,Company_Name,Product_capability)
SELECT id,Medicine_Name,Medicine_Type,Company_Name,Product_capability from [business_info2] where Id in (select top 500 Search_Id from #temp_search3 order by id asc)
/*分页存储过程开始*/
IF(@Docount=1)
Select Count(Id) From #temp_search3
ELSE
BEGIN
Set @PageLowerBound=(@pageindex-1)*@pagesize
Set @PageUpperBound=@PageLowerBound+@pagesize
Set rowcount @PageUpperBound
INSERT INTO @indextable(nid) select Id from #search_table3 order by Id asc
Select TOP 500 O.* From #search_table3 O,@indextable T where O.Id=T.nid and T.id>@PageLowerBound and T.id<=@PageUpperBound order by T.id
END
/*分页存储过程结束*/
END
/*当传为值为3时运行下列(结束)*/
END
GO
- 基于sql-server 的全文检索
- SQL Server的全文检索
- sql server全文检索
- SQL Server 全文检索
- SQL Server全文检索
- sql server 2005的全文检索
- SQL Server全文检索简介
- SQL Server 2000 全文检索
- SQL Server 2000全文检索
- SQL Server 2000 全文检索
- SQL server 全文检索建议
- SQL Server 全文检索技术
- SQL Server 2005 全文检索
- SQL Server 全文检索 -转贴
- SQL SERVER数据库全文检索
- SQL Server 2005 全文检索
- SQL Server 全文检索初探
- SQL Server 2000全文检索
- MRP基本原理
- 批处理应用一则:批量删除文件
- jdbc学习笔记(3)
- (5)'c++:COMPLETE REFERENCE' 第一部分 第一章(c语言概述) 第四节
- [《Twisted网络编程必备》翻译] 前言 and so on
- 基于sql-server 的全文检索
- ERP主要功能模块简介- -
- msn 提示
- 数据库设计三大范式应用实例剖析
- CakePhp分页功能
- 浅谈行业网站的运营
- 40 种网站设计常用技巧
- 多级反向代理[Squid]下获取客户端真实IP地址
- FC6 下更改设置使得totem支持播放多种媒体格式