Faceted Search Query Xml - MasterQuery Element Example

The Faceted Search Query Builder macro (se:facetedsearchquerybuilder) contains a lot of local instance vipers. Usually, local instance vipers are used within the macro itself, e.g. formatting, but in this case the local instance vipers should only be used within a query xml definition.

This example shows a masterquery element from a query xml definition in which some of the available local instance vipers are used.

 

Smartsite SXML CopyCode image Copy Code
<masterquery connection="" defaultsources="content">
    <query><![CDATA[
            SELECT {this.selectfields()}
            FROM {this.tableorview()} c
            JOIN (
                  SELECT {this.rankingfields()}
                  FROM  (
                        {this.searchquery(default="SELECT Nr, 0 As SearchRank, 1 AS BaseSearch 
                            FROM "+this.searchgroupviewname())}
                  ) rq
                  GROUP BY rq.Nr
            ) vt2 ON c.Nr=vt2.Nr
            JOIN {this.searchgroupviewname()} sgv WITH (NOEXPAND) ON c.Nr = sgv.Nr
            {this.joinclause(default="")}
            {this.resultchanneljoins("c",default="")}
            WHERE {this.whereclause(default="(1=1)")}
            AND vt2.BaseSearch = 1
            AND {security.getbrowsablewhere('c',100)}
        ]]>
        </query>
    <fields rem="value for this.selectfields(), used to display the query results"><![CDATA[
        ROW_NUMBER() OVER (ORDER BY {this.orderby(default="searchrank DESC")}, c.Nr) AS rownum, 
            c.Nr AS Nr, CAST(vt2.searchrank AS INT) AS searchrank, c.contenttype, c.author, 
            c.ModDate AS ModDate, c.Title AS Title,  
            SUBSTRING(sgv.QueryData,0,16000) AS Abstract, ft.FileExtension,
            {this.resultchannelcode(default="NULL")} AS ChannelCode
        ]]>
    </fields>
    <joins rem="clause used in search results query"><![CDATA[
        JOIN FileTypes ft ON c.FileType=ft.Nr
        ]]>
    </joins>
    <rankingfields rem="value for this.rankingfields()">
        nr, SUM(searchrank) AS searchrank, COUNT(BaseSearch) AS BaseSearch
    </rankingfields>
    <paging rem="paging query for search result"><![CDATA[
         SELECT * FROM (
            {this.searchquery(default="SELECT Nr, 0 As SearchRank, 1 AS BaseSearch 
                FROM "+this.searchgroupviewname())}
        ) x
        WHERE rownum BETWEEN ?:lowerbound AND ?:upperbound
        ]]>
    </paging>
</masterquery>