if (count($extendedQueryWordsArr) > 25) {
    $extendedQueryWordsArr = array_slice($extendedQueryWordsArr, 0, 25);
}
//preprint_r($extendedQueryWordsArr);
// SEARCH INVERTED INDEX FOR DOCUMENTS
$scoringTable = getScoredDocumentsFromInveretdIndex($extendedQueryWordsArr, $query, $isPhraseSearch, $isQuestion, $isColumnSearch, $columnSearchKeyValParams, $isConceptSearch, $lang, $isTransliterationSearch);
if ($isQuestion) {
    $answerInformationContainerArr = answerUserQuestion($query, $queryWordsArr, $taggedSignificantWords, $scoringTable, $lang);
    $userQuestionAnswerConceptsArr = $answerInformationContainerArr['ANSWER_CONCEPTS'];
    $userQuestionAnswerVersesArr = $answerInformationContainerArr['ANSWER_VERSES'];
    //preprint_r($userQuestionAnswerConceptsArr);
    $queryWordsArr = array_merge($queryWordsArr, $userQuestionAnswerConceptsArr);
}
/// LOG QUERY //LOCATION SIGNIFICANT BEFORE  handleEmptyResults because of exit inside
if (!isDevEnviroment()) {
    $searchType = getSearchType($isPhraseSearch, $isQuestion, $isColumnSearch, $isConceptSearch, $isTransliterationSearch);
    logQuery($lang, $query, $searchType, count($scoringTable));
}
// NOT RESULTS FOUND
handleEmptyResults($scoringTable, $extendedQueryWordsArr, $query, $originalQuery, $isColumnSearch, $searchType, $lang);
if (!$isQuestion && !$isColumnSearch) {
    // Check is some words were written incorrectly even if results are returned
    // اكثر الناس case should be أكثر
    $queryWordsWithoutDerivation = array_diff_assoc($extendedQueryWordsArr, $derivedWords);
    $postResultSuggestionArr = postResultSuggestions($lang, $originalQueryWordsArrSwaped);
    //echoN(memory_get_peak_usage());
    // remove query words from suggestion
    /*foreach($queryWordsWithoutDerivation as $word => $dummy)
    	{
    		if ( isset($postResultSuggestionArr[$word])) unset($postResultSuggestionArr[$word]);
    	}*/
define('SEARCH_STATUS_RESULT_READY', 6);
define('SEARCH_STATUS_FAILED', 7);
define('SEARCH_STATUS_TOO_MANY_RECORDS', 8);
define('SEARCH_TIMEOUT', 300000000);
//5 minutes
define('POLLING_INTERVAL', 100000);
//100ms
$errorStatuses = array(SEARCH_STATUS_UNKNOWN, SEARCH_STATUS_SUSPENDED, SEARCH_STATUS_PARTIAL_RESULT_READY, SEARCH_STATUS_FAILED, SEARCH_STATUS_TOO_MANY_RECORDS);
$requestId = $response;
pollStatus($requestId, $errorStatuses);
$decodedFinalResults = getDecodedFinalResults($requestId);
if (empty($decodedFinalResults)) {
    throw new EmptyResponseException("No results retrieved from Chemspider.");
}
//add Data To DataGraph
$searchType = getSearchType($this->Request->getPathWithoutExtension());
$resultBNode = '_:searchResult';
$this->DataGraph->add_literal_triple($resultBNode, RDF_TYPE, $searchType);
$unreservedParameters = $this->Request->getUnreservedParams();
foreach ($unreservedParameters as $name => $value) {
    $processedName = str_replace('.', '#', $name);
    $predicate = OPS_CHEMSPIDER_PREFIX . $processedName;
    $this->DataGraph->add_literal_triple($resultBNode, $predicate, $value);
}
foreach ($decodedFinalResults as $elem) {
    $this->DataGraph->add_resource_triple($resultBNode, OPS_CHEMSPIDER_PREFIX . 'result', CHEMSPIDER_PREFIX . $elem);
}
$rdfData = $this->DataGraph->to_ntriples();
//assuming nothing else is in the graph
//link pageUri to primaryTopic - resulted blank node
$this->DataGraph->add_resource_triple($this->pageUri, FOAF . 'primaryTopic', $resultBNode);