就是说输入一个词经过处理我已经实现了分词,然后数据库里的查询我以前是用的union 如: (select * from t_xxx t where t.name like %JAVA软件工程师%) UNION (select * from t_xxx t where t.name like %软件工程师%) UNION (select * from t_xxx t where t.name like %JAVA%) UNION …… 这样效率太低且参数不容易控制 我现在的想法是 分词后用,分开组合成字符串如中华人民共和国 分成中华,人民,共和国 然后新建一个function SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GOALTER function split ( @SourceSql varchar(8000), @StrSeprate varchar(10) ) returns @temp table(F1 varchar(100)) as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@SourceSql) while @i>=1 begin insert @temp values(left(@SourceSql,@i-1)) set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i) set @i=charindex(@StrSeprate,@SourceSql) end if @SourceSql<>'' insert @temp values(@SourceSql) return end GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO 然后该怎么办呢?
如: (select * from t_xxx t where t.name like %JAVA软件工程师%) UNION (select * from t_xxx t where t.name like %软件工程师%)
UNION (select * from t_xxx t where t.name like %JAVA%) UNION ……
这样效率太低且参数不容易控制
我现在的想法是
分词后用,分开组合成字符串如中华人民共和国
分成中华,人民,共和国
然后新建一个function
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GOALTER function split ( @SourceSql varchar(8000), @StrSeprate varchar(10) ) returns @temp table(F1 varchar(100)) as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@SourceSql) while @i>=1 begin insert @temp values(left(@SourceSql,@i-1)) set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i) set @i=charindex(@StrSeprate,@SourceSql) end if @SourceSql<>'' insert @temp values(@SourceSql) return end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
然后该怎么办呢?
http://topic.csdn.net/u/20090911/16/e9c4f6e1-7551-4109-9dd7-05f18e5e8e20.html