Using SharePoint 2010 Search webservice in Javascript for FAST search for sharepoint 2010

Here we will see a simple example of calling SharePoint 2010 search web service in javascript. This example is for FAST search for SharePoint 2010, so we will use FQL in our query packet.

We will be using XMLHttpRequest object for our request and response.

We need to undertand the below XML structures for moving ahead:

1] SOAP request for search service. Here, the request XML is for 'QueryEX' method. 'queryXml' will contain the actual query packet for search, as indicated by string.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <QueryEx xmlns="https://microsoft.com/webservices/OfficeServer/QueryService">
      <queryXml>string</queryXml>
    </QueryEx>
  </soap:Body>
</soap:Envelope>

 Let's assume this is represented by variable 'requestXML'.

2] SOAP response for search service. Here, the response XML is for 'QueryEX' method. 'QueryExResult' will contain the result, as indicated by xml.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <QueryExResponse xmlns="https://microsoft.com/webservices/OfficeServer/QueryService">
      <QueryExResult><xsd:schema>schema</xsd:schema>xml</QueryExResult>
    </QueryExResponse>
  </soap:Body>
</soap:Envelope>

  Let's assume this is represented by variable 'responseXML'.

3] FQL Query Packet for search, indicating the search criteria, refiners, sorting, etc.

<QueryPacket Revision=\"1000\">
  <Query>
    <Context>
      <QueryText language=\"en-US\"type=\"FQL\">string(\"-\",Mode=\"AND\")</QueryText>
    </Context>
    <SupportedFormats Format=\"urn:Microsoft.Search.Response.Document.Document\"/>
    <ResultProvider>FASTSearch</ResultProvider>
    <Range>
      <StartAt>1</StartAt>
      <Count>20</Count>
    </Range>
    <EnableStemming>true</EnableStemming>
    <EnableSpellCheck>Suggest</EnableSpellCheck>
    <IncludeSpecialTermsResults>true</IncludeSpecialTermsResults>
    <IncludeRelevantResults>true</IncludeRelevantResults>
    <ImplicitAndBehavior>true</ImplicitAndBehavior>
    <TrimDuplicates>true</TrimDuplicates>
    <Properties>
      <Property name=\"Rank\"/>
      <Property name=\"Title\" />
      <Property name=\"Author\"/>
      <Property name=\"Size\" />
      <Property name=\"Path\" />
      <Property name=\"Write\"/>
      <Property name=\"SiteName\" />
      <Property name=\"HitHighlightedSummary\"/>
      <Property name=\"HitHighlightedProperties\"/>
      <Property name=\"ContentClass\"/>
      <Property name=\"IsDocument\"/>
      <Property name=\"Url\" />
      <Property name=\"FileExtension\"/>
      <Property name=\"SpSiteUrl\"/>
      <Property name=\"docvector\"/>
      <Property name=\"fcocount\" />
      <Property name=\"fcoid\"/>
    </Properties>
  </Query>
</QueryPacket>

 Let's assume this is represented by variable 'queryPacket'. this will replace the value string in step [1] for requestXML.

 

We can write a function incorporating all the above for calling the service and getting the response as follows:

function RetrieveSearchData()

{

    //get the request object

    var requestObject = new XMLHttpRequest();

    //Initializes request and specifies the method, URL, and other information for the request.

    requestObject.open("POST", "https://SERVER:PORT/_vti_bin/search.asmx", false);

    //set request header

    requestObject.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

    //Get FQL queryPacket along with the SOAP envelope

    var packet = requestXML;

    //Sends an HTTP request to the server and receives a response

    requestObject.send(packet);

    //process responseXML

}

 

There are multiple ways to achieve the above processing in AJAX, ASP.net or traditional C#. This example is just one of the ways to process SharePoint webservice in javascript code.