spSearchByText
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ClientsID | int | IN | |
@ClientUsersID | int | IN | |
@SearchText | nvarchar(768) | IN | |
@SearchTextRaw | nvarchar(255) | IN | |
@FirstWord | nvarchar(200) | IN | |
@SearchTypeFilter | int | IN | |
@SiteContentFilter | int | IN | |
@PageContentFilter | int | IN | |
@ApplyDateFilter | bit | IN | |
@StartDateFilter | datetime | IN | |
@EndDateFilter | datetime | IN | |
@TagOnlySearch | bit | IN | |
@ClientSitesIDs | xml | IN |
Definition
Copy
CREATE PROCEDURE [dbo].[spSearchByText]
(
@ClientsID int,
@ClientUsersID int,
@SearchText nvarchar(768),
@SearchTextRaw nvarchar(255),
@FirstWord nvarchar(200),
@SearchTypeFilter int,
@SiteContentFilter int,
@PageContentFilter int,
@ApplyDateFilter bit,
@StartDateFilter datetime,
@EndDateFilter datetime,
@TagOnlySearch bit,
@ClientSitesIDs XML
)
AS
BEGIN
DECLARE @CurrentDate datetime
DECLARE @ContentPages table(
PageID int,
PageName nvarchar(255),
PageContentID int,
SiteContentID int,
PageGUID uniqueidentifier,
TemplateGUID uniqueidentifier null,
ContentTypesID int)
DECLARE @ValidSites table(SiteID int)
SET @CurrentDate = getutcdate()
INSERT INTO @ValidSites
SELECT ID
FROM ClientSites CS
WHERE CS.Deleted = 0 and dbo.UFN_CLIENTSITE_ISPUBLISHED(CS.ID) = 1
--get all pages with matching targeted content
INSERT INTO @ContentPages select DISTINCT sp.ID, CASE LEN(isnull(sp.DisplayName, '')) WHEN 0 THEN sp.PageName ELSE sp.DisplayName END AS PageName,
pc.ID, s.SiteContentID, sp.guid, (SELECT sp2.GUID from SitePages sp2 where sp2.ID = sp.TemplatePageID), SC.ContentTypesID
FROM Search s
INNER JOIN TargetedContentChecks tcc on tcc.ContentID = s.SiteContentID
INNER JOIN TargetedContentPart tp on tp.ID = tcc.TargetedPartID
INNER JOIN PageContent pc on pc.SiteContentID = tp.SiteContentID
INNER JOIN SitePages sp on sp.IsTemplatePage = 0 and sp.id = pc.SitePagesID
INNER JOIN dbo.SiteContent SC on SC.ID = S.SiteContentID
where sp.deleted = 0 and SC.deleted = 0
--get all pages with matching content
INSERT INTO @ContentPages select DISTINCT sp.ID, CASE LEN(isnull(sp.DisplayName, '')) WHEN 0 THEN sp.PageName ELSE sp.DisplayName END AS PageName,
pc.ID, s.SiteContentID, sp.guid, (SELECT sp2.GUID from SitePages sp2 where sp2.ID = sp.TemplatePageID), SC.ContentTypesID
FROM SitePages sp
INNER JOIN PageContent pc on sp.IsTemplatePage = 0 and pc.SitePagesID = sp.id
INNER JOIN Search s on s.SiteContentID = pc.SiteContentID
INNER JOIN dbo.SiteContent SC on SC.ID = S.SiteContentID
where sp.deleted = 0 and SC.deleted = 0
--delete pages from locked artifacts
delete @ContentPages
from @ContentPages CP
inner join dbo.pagemodelitem PMI on CP.PageGUID = PMI.OBJECTGUID
inner join dbo.pagemodel PM on PM.ID = PMI.PageModelID
where PM.LOCKARTIFACTS = 1
--delete pages from sites outside the scope of this search
if @ClientSitesIDs.exist('/ids/id') = 1
delete @ContentPages
from @ContentPages CP
inner join dbo.SitePages SP on SP.ID = CP.PageID
left outer join @ClientSitesIDs.nodes('/ids/id') IDS(ID) on IDS.ID.value('@value', 'int') = SP.ClientSitesID
where IDS.ID.value('@value', 'int') is null
--delete pages from unpublished or deleted sites
delete @ContentPages
from @ContentPages CP
inner join dbo.SitePages SP on SP.ID = CP.PageID
left outer join @ValidSites VS on VS.SiteID = SP.ClientSitesID
where VS.SiteID Is null
insert into [dbo].[SearchLog]
(SearchTypeFilter, ClientID, ClientUserID, [Text])
values
(@SearchTypeFilter, @ClientsID, @ClientUsersID, @SearchTextRaw)
if @SearchTypeFilter <= 0
SET @SearchTypeFilter = NULL
if @SiteContentFilter <= 0
SET @SiteContentFilter = NULL
-- Tag search first
if @ApplyDateFilter = 1
if @TagOnlySearch = 1
SELECT DISTINCT cp.PageID ID, cp.PageName, s.SearchTypeID, s.SiteContentID, s.Title, s.ExtendedKey, k.RANK, dbo.fnSearchHighlightText(s.SEARCHTEXT,@FirstWord) SearchText, cp.PageContentID, s.SearchDate1, s.ContentUpdateDate, sc.Guid ObjectGUID, cp.PageGUID, cp.TemplateGUID, 1 AS ResultFromtag, cp.ContentTypesID
FROM Search s
INNER JOIN CONTAINSTABLE(Search, TagText, @SearchText) k ON k.[KEY] = s.ID and k.RANK > 0
and isnull(@SearchTypeFilter,s.SearchTypeId) = s.SearchTypeId
and isnull(@SiteContentFilter,s.SiteContentId) = s.SiteContentId
INNER JOIN @ContentPages cp on cp.SiteContentID= s.SiteContentID
INNER JOIN (SELECT [ID], [Guid] FROM vwSiteContent WHERE [Status]=2) sc on sc.ID = s.SiteContentID AND dbo.fnSiteContentIsPublished(sc.id,@CurrentDate) = 1
where [dbo].[fnSearchDateRangeIsValid](@StartDateFilter, @EndDateFilter, s.SearchDate1, s.SearchDate2) = 1
ORDER BY k.RANK desc
else
SELECT DISTINCT cp.PageID ID, cp.PageName, s.SearchTypeID, s.SiteContentID, s.Title, s.ExtendedKey, k.RANK, dbo.fnSearchHighlightText(s.SEARCHTEXT,@FirstWord) SearchText, cp.PageContentID, s.SearchDate1, s.ContentUpdateDate, sc.Guid ObjectGUID, cp.PageGUID, cp.TemplateGUID, 1 AS ResultFromtag, cp.ContentTypesID
FROM Search s
INNER JOIN CONTAINSTABLE(Search, TagText, @SearchText) k ON k.[KEY] = s.ID and k.RANK > 0
and isnull(@SearchTypeFilter,s.SearchTypeId) = s.SearchTypeId
and isnull(@SiteContentFilter,s.SiteContentId) = s.SiteContentId
INNER JOIN @ContentPages cp on cp.SiteContentID= s.SiteContentID
INNER JOIN (SELECT [ID], [Guid] FROM vwSiteContent WHERE [Status]=2) sc on sc.ID = s.SiteContentID AND dbo.fnSiteContentIsPublished(sc.id,@CurrentDate) = 1
where [dbo].[fnSearchDateRangeIsValid](@StartDateFilter, @EndDateFilter, s.SearchDate1, s.SearchDate2) = 1
UNION ALL
SELECT DISTINCT cp.PageID ID , cp.PageName, s.SearchTypeID, s.SiteContentID, s.Title, s.ExtendedKey, k.RANK, dbo.fnSearchHighlightText(s.SEARCHTEXT,@FirstWord) SearchText, cp.PageContentID, s.SearchDate1, s.ContentUpdateDate, sc.Guid ObjectGUID, cp.PageGUID, cp.TemplateGUID, 0 AS ResultFromtag, cp.ContentTypesID
FROM Search s
INNER JOIN CONTAINSTABLE(Search, SearchText, @SearchText) k ON k.[KEY] = s.ID and k.RANK > 0
and isnull(@SearchTypeFilter,s.SearchTypeId) = s.SearchTypeId
and isnull(@SiteContentFilter,s.SiteContentId) = s.SiteContentId
INNER JOIN @ContentPages cp on cp.SiteContentID= s.SiteContentID
INNER JOIN (SELECT [ID], [Guid] FROM vwSiteContent WHERE [Status]=2) sc on sc.ID = s.SiteContentID AND dbo.fnSiteContentIsPublished(sc.id,@CurrentDate) = 1
where [dbo].[fnSearchDateRangeIsValid](@StartDateFilter, @EndDateFilter, s.SearchDate1, s.SearchDate2) = 1
ORDER BY k.RANK desc
else
if @TagOnlySearch = 1
SELECT DISTINCT cp.PageID ID, cp.PageName, s.SearchTypeID, s.SiteContentID, s.Title, s.ExtendedKey, k.RANK, dbo.fnSearchHighlightText(s.SEARCHTEXT,@FirstWord) SearchText, cp.PageContentID, s.SearchDate1, s.ContentUpdateDate, sc.Guid ObjectGUID, cp.PageGUID, cp.TemplateGUID, 1 AS ResultFromtag, cp.ContentTypesID
FROM Search s
INNER JOIN CONTAINSTABLE(Search, TagText, @SearchText) k ON k.[KEY] = s.ID and k.RANK > 0
and isnull(@SearchTypeFilter,s.SearchTypeId) = s.SearchTypeId
and isnull(@SiteContentFilter,s.SiteContentId) = s.SiteContentId
INNER JOIN @ContentPages cp on cp.SiteContentID= s.SiteContentID
INNER JOIN (SELECT [ID], [Guid] FROM vwSiteContent WHERE [Status]=2) sc on sc.ID = s.SiteContentID AND dbo.fnSiteContentIsPublished(sc.id,@CurrentDate) = 1
ORDER BY k.RANK desc
else
SELECT DISTINCT cp.PageID ID, cp.PageName, s.SearchTypeID, s.SiteContentID, s.Title, s.ExtendedKey, k.RANK, dbo.fnSearchHighlightText(s.SEARCHTEXT,@FirstWord) SearchText, cp.PageContentID, s.SearchDate1, s.ContentUpdateDate, sc.Guid ObjectGUID, cp.PageGUID, cp.TemplateGUID, 1 AS ResultFromtag, cp.ContentTypesID
FROM Search s
INNER JOIN CONTAINSTABLE(Search, TagText, @SearchText) k ON k.[KEY] = s.ID and k.RANK > 0
and isnull(@SearchTypeFilter,s.SearchTypeId) = s.SearchTypeId
and isnull(@SiteContentFilter,s.SiteContentId) = s.SiteContentId
INNER JOIN @ContentPages cp on cp.SiteContentID= s.SiteContentID
INNER JOIN (SELECT [ID], [Guid] FROM vwSiteContent WHERE [Status]=2) sc on sc.ID = s.SiteContentID AND dbo.fnSiteContentIsPublished(sc.id,@CurrentDate) = 1
UNION ALL
SELECT DISTINCT cp.PageID ID, cp.PageName, s.SearchTypeID, s.SiteContentID, s.Title, s.ExtendedKey, k.RANK, dbo.fnSearchHighlightText(s.SEARCHTEXT,@FirstWord) SearchText, cp.PageContentID, s.SearchDate1, s.ContentUpdateDate, sc.Guid ObjectGUID, cp.PageGUID, cp.TemplateGUID, 0 AS ResultFromtag, cp.ContentTypesID
FROM Search s
INNER JOIN CONTAINSTABLE(Search, SearchText, @SearchText) k ON k.[KEY] = s.ID and k.RANK > 0
and isnull(@SearchTypeFilter,s.SearchTypeId) = s.SearchTypeId
and isnull(@SiteContentFilter,s.SiteContentId) = s.SiteContentId
INNER JOIN @ContentPages cp on cp.SiteContentID= s.SiteContentID
INNER JOIN (SELECT [ID], [Guid] FROM vwSiteContent WHERE [Status]=2) sc on sc.ID = s.SiteContentID AND dbo.fnSiteContentIsPublished(sc.id,@CurrentDate) = 1
ORDER BY k.RANK desc
END