实现CommunityStartKit的中文搜索(转)

官方版本的CommunityStartKit(简称CSK)的搜索功能只支持英文的词汇搜索,中文只能整个文章或句子作为关键字实现搜索,其实就是中文没有进行词汇分割。下面是CSK中文搜索实现方法:

1. 先在SQL SERVER建立全文检索
2. 在表Community_ContentPages上按contentPage_title,contentPage_description建立全文检索
其中SQLServer全文检索有中文问题:
在\Program Files\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config 目录用修改文件noise.chs,内容用字符'@'保存即可。

3.修改存储过程

None.gif if   exists  ( select   *   from  dbo.sysobjects  where  id  =   object_id (N ' [dbo].[Community_SearchAddSearchKey] ' and   OBJECTPROPERTY (id, N ' IsProcedure ' =   1
None.gif
drop   procedure   [ dbo ] . [ Community_SearchAddSearchKey ]  
None.gif
GO  
None.gif
None.gif
if   exists  ( select   *   from  dbo.sysobjects  where  id  =   object_id (N ' [dbo].[Community_SearchGetSearchResults] ' and   OBJECTPROPERTY (id, N ' IsProcedure ' =   1
None.gif
drop   procedure   [ dbo ] . [ Community_SearchGetSearchResults ]  
None.gif
GO  
None.gif
None.gif
SET  QUOTED_IDENTIFIER  OFF  
None.gif
GO  
None.gif
SET  ANSI_NULLS  ON  
None.gif
GO  
None.gif
None.gif 
None.gif
None.gif
CREATE   PROCEDURE  dbo.Community_SearchAddSearchKey 
None.gif
None.gif
@communityID   int
None.gif
@sectionID   int
None.gif
@contentPageID   int
None.gif
@searchKey   nvarchar ( 100
None.gif
None.gif
AS  
None.gif
DELETE  
None.gifCommunity_SearchKeys 
None.gif
None.gif
GO  
None.gif
SET  QUOTED_IDENTIFIER  OFF  
None.gif
GO  
None.gif
SET  ANSI_NULLS  ON  
None.gif
GO  
None.gif
None.gif
SET  QUOTED_IDENTIFIER  ON  
None.gif
GO  
None.gif
SET  ANSI_NULLS  ON  
None.gif
GO  
None.gif
None.gif
None.gif
CREATE   PROCEDURE  dbo.Community_SearchGetSearchResults 
None.gif
None.gif
@communityID   int
None.gif
@username   nvarchar ( 50 ), 
None.gif
@sectionID   int
None.gif
@searchString   nvarchar ( 50
None.gif
None.gif
AS  
None.gif
--  Get User ID 
None.gif
DECLARE   @UserID   Int  
None.gif
SET   @UserID   =  dbo.Community_GetUserID(  @communityID @Username
None.gif
--  Create a temp table to store the select results 
None.gif
CREATE   TABLE  #PageIndex 
None.gif
None.gifIndexId 
int   IDENTITY  ( 1 1 NOT   NULL
None.gifPageID 
int  
None.gif
None.gif
--  Create dynamic search string 
None.gif
DECLARE   @search   nvarchar ( 4000
None.gif
IF   @sectionID   =   - 1  
None.gif
BEGIN  
None.gif
SET   @search   =  
None.gif
' INSERT INTO #PageIndex(PageID) 
None.gifSELECT TOP 50 
None.gifcontentPage_id 
None.gifFROM 
None.gifCommunity_ContentPages 
None.gifWHERE 
None.gif(Contains(contentPage_title,
'   +   @searchString   +   ' ) or Contains(contentPage_description, '   +   @searchString   +   ' )) 
None.gifAND dbo.Community_IsSectionAllowed(
'   +   CAST ( @communityID   AS   NVarChar ( 10 ))  +   ' , contentPage_sectionID,  '''   +   @username   +   ''' )=1 
None.gifGROUP BY 
None.gifcontentPage_id 
None.gifORDER BY COUNT(*) DESC
'  
None.gif
END  
None.gif
ELSE  
None.gif
BEGIN  
None.gif
SET   @search   =  
None.gif
' INSERT INTO #PageIndex(PageID) 
None.gifSELECT TOP 50 
None.gifcontentPage_id 
None.gifFROM 
None.gifCommunity_ContentPages 
None.gifWHERE 
None.gif(Contains(contentPage_title,
'   +   @searchString   +   ' ) or Contains(contentPage_description, '   +   @searchString   +   ' )) 
None.gifand contentPage_sectionID =
'   +   CAST ( @sectionID   AS   NVarchar ( 10 ))  + '  
None.gifGROUP BY 
None.gifcontentPage_id 
None.gifORDER BY COUNT(*) DESC
'  
None.gif
END  
None.gif
--  Execute Dynamic query 
None.gif
EXEC  ( @search
None.gif
--  create static date for UDF 
None.gif
DECLARE   @currentDate   DateTime  
None.gif
SET   @currentDate   =  GetUtcDate() 
None.gif
SELECT  
None.gifContent.
*  
None.gif
FROM  
None.gifdbo.Community_GetContentItem(
@communityID @userID @currentDate ) Content 
None.gif
INNER   JOIN  #PageIndex  WITH  (nolock) 
None.gif
ON  ContentPage_ID  =  #PageIndex.PageID 
None.gif
ORDER   BY  
None.gif#PageIndex.IndexID 
None.gif
None.gif 
None.gif
GO  
None.gif
SET  QUOTED_IDENTIFIER  OFF  
None.gif
GO  
None.gif
SET  ANSI_NULLS  ON  
None.gif
GO  
None.gif



4.增加函数

None.gif CREATE   FUNCTION  dbo.Community_IsSectionAllowed
None.gif(
None.gif  
@communityID   INT ,
None.gif  
@sectionID   INT ,
None.gif  
@username   NVarchar ( 50 )
None.gif)  
None.gif
RETURNS   BIT  
None.gif
AS   
None.gif
BEGIN
ExpandedBlockStart.gifContractedBlock.gif 
/**/ /* Public content */
None.gif 
IF   @sectionID   IN  
None.gif  (
None.gif   
SELECT  
None.gif    ss_sectionID 
None.gif   
FROM  
None.gif    Community_SectionSecurity 
None.gif    
join  Community_Sections
None.gif    
on  Community_SectionSecurity.ss_sectionID  =  Community_Sections.section_id
None.gif   
WHERE  
None.gif    ss_communityID 
=   @communityID  
None.gif    
AND  ss_roleType  =   0
None.gif    
AND  ss_role = ' Community-Everyone '
None.gif    
AND  Community_Sections.section_isEnabled  =   1
None.gif  )
None.gif 
RETURN   1
None.gif 
None.gif 
If   NOT (dbo.Community_GetUserID( @communityID @Username IS   NULL )
None.gif  
BEGIN
None.gif  
ExpandedBlockStart.gifContractedBlock.gif  
/**/ /* Authenticated User allowed content */  
None.gif  
If   @sectionID   IN  
None.gif   (
None.gif    
SELECT  
None.gif     ss_sectionID 
None.gif    
FROM  
None.gif     Community_SectionSecurity 
None.gif     
join  Community_Sections
None.gif     
on  Community_SectionSecurity.ss_sectionID  =  Community_Sections.section_id
None.gif    
WHERE  
None.gif     ss_communityID 
=   @communityID  
None.gif     
AND  ss_roleType  =   0
None.gif     
AND  ss_role = ' Community-Authenticated '
None.gif     
AND  Community_Sections.section_isEnabled  =   1
None.gif   )
None.gif  
RETURN   1
None.gif  
ExpandedBlockStart.gifContractedBlock.gif  
/**/ /* User allowed content */  
None.gif  
If   @sectionID   IN  
None.gif   (
None.gif    
SELECT  
None.gif     ss_sectionID 
None.gif    
FROM  
None.gif     Community_SectionSecurity 
None.gif     
join  Community_Sections
None.gif     
on  Community_SectionSecurity.ss_sectionID  =  Community_Sections.section_id
None.gif     
join  Community_UsersInRoles
None.gif     
on  Community_UsersInRoles.UserRoles_Rolename  =  Community_SectionSecurity.ss_role
None.gif    
WHERE  
None.gif     ss_communityID 
=   @communityID  
None.gif     
AND  ss_roleType  =   0
None.gif     
AND  Community_UsersInRoles.UserRoles_Username  =   @userName
None.gif     
AND  Community_Sections.section_isEnabled  =   1
None.gif   )
None.gif  
RETURN   1   
None.gif
None.gif  
END
None.gif
None.gif
RETURN   0
None.gif
END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值