Blog Hero Image

Coveo Search API from within Sitecore – Part 2/2

Jun 25, 2012
Juan Arias

Now that we learned how to query Coveo Enterprise Search by using coveo dlls from a Sitecore CMS page in part 1, I will show how to do the same query via web services; this code might even be useful for a desktop or mobile component of your Sitecore solution. Open your Visual Studio project and add a Service Reference to http://mycoveoserver:8080/CoveoSearch.asmx

We will use the same web form from the previous post:

With the same code:

<asp:TextBox ID="txtTitle" runat="server"></asp:TextBox>


<asp:Button ID="SearchButton" runat="server" Text="Search" onclick="SearchButton_Click" />

<br />

<br />

<asp:GridView ID="resultsGrid" runat="server" AutoGenerateColumns="False">


    <asp:BoundField DataField="SitecoreId" DataFormatString="{{{0}}}" HeaderText="Sitecore Id" />

    <asp:BoundField DataField="Title" HeaderText="Title" />

    <asp:BoundField DataField="Author" HeaderText="Author" />



    The query returned no results.



<asp:Label ID="lblMessage" runat="server" Text="" EnableViewState="false"></asp:Label>

And this code behind:

private void PerformSearch()


    SearchServiceSoapClient searchService = new SearchServiceSoapClient();


    //Create the query parameters object

    QueryParameters queryParams = new QueryParameters();


    //It is necessary to specify all the fields that are needed as results

    ArrayOfString neededFields = new ArrayOfString();


    //@SCItemID is the Sitecore Item ID



    //We will need a custom field too



    //Assign the needed fields array

    queryParams.NeededFields = neededFields;


    //We will need 10 results

    queryParams.NumberOfResults = 10;


    //Start with the first item, this is used when paging the results

    queryParams.FirstResult = 0;


    //Sort the results by a field, ascending

    queryParams.SortCriteria = SortByEnum.FieldAscending;


    //Sort by the custom field @MyAuthor

    queryParams.SortByField = "@MyAuthor";


    //Search by the Title (@systitle)

    queryParams.AdvancedQuery = string.Format("@systitle={0}", this.txtTitle.Text);


    //Perform the search

    QueryResults searchResults = searchService.PerformQuery(queryParams);


    //Check if there are results

    if (searchResults != null &&

        searchResults.Results != null &&

        searchResults.Results.Length > 0)


        //The results will be stored in the array 'searchResults.Results'

        //For this example, we will create an Anonymous Type (just to avoid the creation of an object entity)

        //and assign the list to the GridView

        var resultList = from result in searchResults.Results

                         select new


                               Title = result.Title,

                               SitecoreId = result.Fields[0].Value.ToString(),

                               Author = result.Fields[1].Value.ToString()



        this.resultsGrid.DataSource = resultList;



        this.lblMessage.Text = string.Format("Showing {0} of {1} results", resultList.Count(), searchResults.TotalCount);




        this.resultsGrid.DataSource = null;




And we get the exact same results as we got in the previous post: