function search($query, $facets = array(), $offset = false, $limit = false, $indexName = false, $indexType = false) { $global_query = $query; $query = preg_replace("/[^a-zA-Z 0-9]+/", "", $global_query['s']); // Define a Query. We want a string query. $elasticaQueryString = new Elastica_Query_QueryString(); $elasticaQueryString->setQuery($query); $elasticaQueryString->setFields(array('title', 'content')); $elasticaFilterAnd = new Elastica_Filter_And(); $elasticaFilterBool = new Elastica_Filter_Bool(); $tagTerm = $global_query['tags']; $authorTerm = $global_query['author']; $catTerm = $global_query['cats']; $dateFrom = $global_query['datefrom']; $dateTo = $global_query['dateto']; if (!empty($tagTerm)) { $tagTermArr = explode(",", $tagTerm); $filterTag = new Elastica_Filter_Terms(); $filterTag->setTerms('tag', $tagTermArr); $elasticaFilterAnd->addFilter($filterTag); } if (!empty($authorTerm)) { $authorTermArr = explode(",", $authorTerm); $filterAuthor = new Elastica_Filter_Terms(); $filterAuthor->setTerms('author', $authorTermArr); $elasticaFilterAnd->addFilter($filterAuthor); } if (!empty($catTerm)) { $catTermArr = explode(",", $catTerm); $filterCat = new Elastica_Filter_Terms(); $filterCat->setTerms('cat', $catTermArr); $elasticaFilterAnd->addFilter($filterCat); } if (!empty($dateFrom) && !empty($dateTo)) { $filterDate = new Elastica_Filter_Range('date', array('from' => strftime('%F %T', strtotime($dateFrom)), 'to' => strftime('%F %T', strtotime($dateTo)))); // $dates = new Elastica_Filter_Terms(); // $dates->setTerms('date', array($dateFrom." -> ".$dateTo)); // $elasticaFilterAnd->addFilter($dates); $elasticaFilterBool->addMust($filterDate); } // Create the actual search object with some data. $elasticaQuery = new Elastica_Query(); $elasticaQuery->setQuery($elasticaQueryString); if (!empty($tagTerm) || !empty($authorTerm) || !empty($catTerm) || !empty($dateFrom) || !empty($dateTo)) { // $elasticaQuery->setFilter($elasticaFilterAnd); $elasticaQuery->setFilter($elasticaFilterBool); } if ($offset) { $elasticaQuery->setFrom($offset); } if ($limit) { $elasticaQuery->setLimit($limit); } //Check facet fields if (!empty($facets)) { $facet_arr = array(); foreach ($facets as $facet) { ${$facet . "_facet"} = new Elastica_Facet_Terms($facet); ${$facet . "_facet"}->setField($facet); ${$facet . "_facet"}->setSize(10); ${$facet . "_facet"}->setOrder('reverse_count'); array_push($facet_arr, ${$facet . "_facet"}); } $elasticaQuery->setFacets($facet_arr); } //Search on the index. if ($indexType) { $elasticaResultSet = $this->elastic_search_client->getIndex($indexName)->getType($indexType)->search($elasticaQuery); } else { $elasticaResultSet = $this->elastic_search_client->getIndex($indexName)->search($elasticaQuery); } return $elasticaResultSet; }