【问题标题】:Kentico filter duplicates in searchKentico 过滤搜索中的重复项
【发布时间】:2020-10-29 04:31:22
【问题描述】:

我有以下脚本来返回链接页面的搜索结果。我需要过滤掉别名页面的重复项,并按字母顺序对结果进行排序。目前,它返回主页面和别名页面,并且不对它们进行排序。

<script runat="server">
    bool hasDegree;
    bool hasCertificate;
    bool hasLetter;
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        hasDegree = ValidationHelper.GetBoolean(CMS.DocumentEngine.DocumentHelper
           .GetDocuments("FCC.Credential").Path(Eval<string>("NodeAliasPath"), CMS.DocumentEngine.PathTypeEnum.Children)
           .Published().Where("CredentialType = 'D'").Count > 0, false);
           
        hasCertificate = ValidationHelper.GetBoolean(CMS.DocumentEngine.DocumentHelper
           .GetDocuments("FCC.Credential").Path(Eval<string>("NodeAliasPath"), CMS.DocumentEngine.PathTypeEnum.Children)
           .Published().Where("CredentialType = 'C'").Count > 0, false);
           
        hasLetter = ValidationHelper.GetBoolean(CMS.DocumentEngine.DocumentHelper
           .GetDocuments("FCC.Credential").Path(Eval<string>("NodeAliasPath"), CMS.DocumentEngine.PathTypeEnum.Children)
           .Published().Where("CredentialType = 'L'").Count > 0, false);         
    }

    protected string imageFilePath(string cssClass, string baseImageName)
    {
        string fileResolution = (cssClass == "desktop") ? "320x200" : "180x180";

        if (baseImageName.Trim().ToLower().EndsWith(".mp4"))
        {
            string baseName = baseImageName.Trim();
            baseName = baseName.Substring(0, baseName.Length - 4);
            return "/FCC/media/ProgramsOfStudy/Video/" + baseName + "_" + fileResolution  + ".jpg";
        }

        return "/FCC/media/ProgramsOfStudy/" + fileResolution + "_" + baseImageName;
    }
</script>

还在名为:RepeaterWithCustomQuery 的页面模板上找到了这个

WITH FOLDER_QUERY AS
(
    SELECT NODEID, NODEPARENTID FROM VIEW_CMS_TREE_JOINED
    WHERE CLASSNAME = 'FCC.CREDENTIALFOLDER'
),
CREDENTIAL_QUERY AS
(
    SELECT CREDENTIALTYPE, NODEPARENTID FROM FCC_CREDENTIAL
    JOIN VIEW_CMS_TREE_JOINED
        ON [CREDENTIALID] = DOCUMENTFOREIGNKEYVALUE
    WHERE CLASSNAME = 'FCC.CREDENTIAL'
    -- IsPublished 
    AND ([DocumentCanBePublished] = 1 AND ([DocumentPublishFrom] IS NULL OR [DocumentPublishFrom] <= GETDATE()) AND ([DocumentPublishTo] IS NULL OR [DocumentPublishTo] >= GETDATE()))
),
CP_QUERY AS
(
  SELECT CREDENTIALTYPE, FOLDER_QUERY.NODEPARENTID
  FROM FOLDER_QUERY 
  JOIN CREDENTIAL_QUERY 
    ON FOLDER_QUERY.NODEID = CREDENTIAL_QUERY.NODEPARENTID
),
PROGRAM_QUERY AS
(
    SELECT
    (SELECT COUNT(*) FROM CP_QUERY WHERE CP_QUERY.NODEPARENTID = NODEID AND CP_QUERY.CREDENTIALTYPE = 'C') as Certificate,
    (SELECT COUNT(*) FROM CP_QUERY WHERE CP_QUERY.NODEPARENTID = NODEID AND CP_QUERY.CREDENTIALTYPE = 'L') as Letter,
    (SELECT COUNT(*) FROM CP_QUERY WHERE CP_QUERY.NODEPARENTID = NODEID AND (CP_QUERY.CREDENTIALTYPE = 'C' OR CP_QUERY.CREDENTIALTYPE = 'L')) as CertAndLetter,
    (SELECT COUNT(*) FROM CP_QUERY WHERE CP_QUERY.NODEPARENTID = NODEID AND CP_QUERY.CREDENTIALTYPE = 'D') as Degree,
    0 as CEWD,
    NodeParentID,
    DocumentName,
    ClassName,
    BaseImageName,
    ImageAltText,
    NodeAliasPath,
    DocumentUrlPath,
    DocumentCulture,
    Description
    FROM [FCC_PROGRAM] JOIN VIEW_CMS_TREE_JOINED
        ON [PROGRAMID] = DOCUMENTFOREIGNKEYVALUE
    WHERE CLASSNAME = 'FCC.PROGRAM'
        -- IsPublished 
    AND ([DocumentCanBePublished] = 1 AND ([DocumentPublishFrom] IS NULL OR [DocumentPublishFrom] <= GETDATE()) AND ([DocumentPublishTo] IS NULL OR [DocumentPublishTo] >= GETDATE()))
),
CEWD_QUERY AS
(
    SELECT
        0 AS Certificate,
        0 AS Letter,
        0 AS CertAndLetter,
        0 AS Degree,
        1 AS CEWD,
        NodeParentID,
        DocumentName,
        ClassName,
        BaseImageName,
        ImageAltText,
        NodeAliasPath,
        DocumentUrlPath,
        DocumentCulture,
        Description
    FROM [FCC_CEWDPROGRAM] JOIN VIEW_CMS_TREE_JOINED
        ON [CEWDPROGRAMID] = DOCUMENTFOREIGNKEYVALUE
    WHERE CLASSNAME = 'FCC.CEWDPROGRAM'
        -- IsPublished 
    AND ([DocumentCanBePublished] = 1 AND ([DocumentPublishFrom] IS NULL OR [DocumentPublishFrom] <= GETDATE()) AND ([DocumentPublishTo] IS NULL OR [DocumentPublishTo] >= GETDATE()))
),
COMBINED_QUERY as
(
    SELECT * FROM PROGRAM_QUERY
    UNION 
    SELECT * FROM CEWD_QUERY
)

SELECT * FROM COMBINED_QUERY
WHERE ##WHERE##

【问题讨论】:

    标签: javascript filter count duplicates kentico


    【解决方案1】:

    在您的 DocumentQuery 中,添加 .FilterDuplicates(),它应该会为您删除那些重复的记录。请记住,它不会带回链接文档,只会带回主文档。

    *** 更新 *** 根据更新的问题,您更新问题的查询看起来像 Kentico 生成的查询。我不确定它为什么被创建,但我将转发器的可见性设置为 false 并在页面上添加一个新的转发器并设置你认为合适的属性。然后根据需要更新 WHERE 条件。

    【讨论】:

    • 我尝试添加它,但搜索根本停止工作。
    • 我在.Count后面加了 >0, false);
    • 它应该紧跟在 .Where() 条件之后,如下所示:.Where("CredentialType = 'L'").FilterDuplicates().Count &gt; 0
    • 我添加了代码,但我仍然看到链接页面的重复。 (显示原始和链接)frederick.edu/programs/combined-listing.aspx/…
    • 我上面列出的是页面类型转换的一部分。我不确定是否还有其他地方我应该看看。我在页面类型的查询下看到了更多代码。
    猜你喜欢
    • 2013-02-25
    • 2014-12-26
    • 2023-03-25
    • 1970-01-01
    • 2011-12-22
    • 2018-08-18
    • 2021-09-27
    • 1970-01-01
    • 2018-12-04
    相关资源
    最近更新 更多