Ejemplo n.º 1
0
	public function testSetCache() {

		$client = new Elastica_Client();
		$index = $client->getIndex('test');
		$index->create(array(), true);
		$type = $index->getType('test');

		$doc = new Elastica_Document(1, array('name' => 'hello world'));
		$type->addDocument($doc);
		$doc = new Elastica_Document(2, array('name' => 'nicolas ruflin'));
		$type->addDocument($doc);
		$doc = new Elastica_Document(3, array('name' => 'ruflin'));
		$type->addDocument($doc);


		$and = new Elastica_Filter_And();

		$idsFilter1 = new Elastica_Filter_Ids();
		$idsFilter1->setIds(1);

		$idsFilter2 = new Elastica_Filter_Ids();
		$idsFilter2->setIds(1);

		$and->addFilter($idsFilter1);
		$and->addFilter($idsFilter2);

		$index->refresh();
		$and->setCached(true);



		$resultSet = $type->search($and);

		$this->assertEquals(1, $resultSet->count());
	}
Ejemplo n.º 2
0
 public function getFilter($exclude = false)
 {
     // facets filter
     $filter = new \Elastica_Filter_And();
     // add class filter
     $class = $this->parameters->getClass();
     if (count($class) > 0 && $exclude != 'class') {
         $term = new \Elastica_Filter_Terms('class', $class);
         $filter->addFilter($term);
     }
     // add family filter
     $family = $this->parameters->getFamily();
     if (count($family) > 0 && $exclude != 'family') {
         $term = new \Elastica_Filter_Terms('family', $family);
         $filter->addFilter($term);
     }
     // add town filter
     $town = $this->parameters->getTown();
     if (count($town) > 0 && $exclude != 'town') {
         $term = new \Elastica_Filter_Terms('town', $town);
         $filter->addFilter($term);
     }
     // add canton filter
     $canton = $this->parameters->getCanton();
     if (count($canton) > 0 && $exclude != 'canton') {
         $term = new \Elastica_Filter_Terms('canton', $canton);
         $filter->addFilter($term);
     }
     // add user filter
     $user = $this->parameters->getUser();
     if (count($user) > 0 && $exclude != 'user') {
         $term = new \Elastica_Filter_Terms('user', $user);
         $filter->addFilter($term);
     }
     // add habitat filter
     $habitat = $this->parameters->getHabitat();
     if (count($habitat) > 0 && $exclude != 'habitat') {
         $term = new \Elastica_Filter_Terms('habitat', $habitat);
         $filter->addFilter($term);
     }
     // add redlist filter
     $redlist = $this->parameters->getRedlist();
     if (count($redlist) > 0 && $exclude != 'redlist') {
         $term = new \Elastica_Filter_Terms('redlist', $redlist);
         $filter->addFilter($term);
     }
     // add image_type filter
     $image_type = $this->parameters->getImage_type();
     if (count($image_type) > 0 && $exclude != 'image_type') {
         $term = new \Elastica_Filter_Terms('image_type', $image_type);
         $filter->addFilter($term);
     }
     // filter date
     $date = $this->parameters->getDate();
     if (count($date) > 0 && $exclude != 'date') {
         $range = $this->getDateFilter();
         $filter->addFilter($range);
     }
     return $filter;
 }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 4
0
 /**
  * Handles search and facets.
  *
  * @param string $q
  * @param array $params
  * @param string $type
  * @return Elastica_ResultSet
  * @throws Exception
  */
 public function search($q, $params = array(), $type = 'product')
 {
     if ($this->getStatus()->indexExists($this->_index)) {
         if (empty($params['filters'])) {
             $params['filters'] = '*';
         }
         $queryFilter = new Elastica_Filter_Query(new Elastica_Query_QueryString($params['filters']));
         if (isset($params['range_filters']) && !empty($params['range_filters'])) {
             $andFilter = new Elastica_Filter_And();
             $andFilter->addFilter($queryFilter);
             $filter = new Elastica_Filter_Range();
             foreach ($params['range_filters'] as $field => $rangeFilter) {
                 $filter->addField($field, $rangeFilter);
             }
             $andFilter->addFilter($filter);
             $queryFilter = $andFilter;
         }
         if (empty($q)) {
             $baseQuery = new Elastica_Query_MatchAll();
         } else {
             $baseQuery = new Elastica_Query_Bool();
             if ($this->isFuzzyQueryEnabled()) {
                 $fields = $this->_getSearchFields(true, $q);
                 $queryFuzzy = new Elastica_Query_FuzzyLikeThis();
                 $queryFuzzy->addFields($fields);
                 $queryFuzzy->setLikeText($q);
                 $queryFuzzy->setMinSimilarity($this->getFuzzyMinSimilarity());
                 $queryFuzzy->setPrefixLength($this->getFuzzyPrefixLength());
                 $queryFuzzy->setMaxQueryTerms($this->getFuzzyMaxQueryTerms());
                 $queryFuzzy->setBoost($this->getFuzzyQueryBoost());
                 $baseQuery->addShould($queryFuzzy);
             }
             $queryString = new Elastica_Query_QueryString($q);
             $queryString->setFields($this->_getSearchFields(false, $q));
             $baseQuery->addShould($queryString);
         }
         $filteredQuery = new Elastica_Query_Filtered($baseQuery, $queryFilter);
         $query = Elastica_Query::create($filteredQuery)->setFrom($params['offset'])->setLimit($params['limit']);
         if (isset($params['facets']['queries']) && !empty($params['facets']['queries'])) {
             foreach ($params['facets']['queries'] as $facetQuery) {
                 $facet = new Elastica_Facet_Query($facetQuery);
                 $facet->setParam('query_string', array('query' => $facetQuery));
                 $query->addFacet($facet);
             }
         }
         if (isset($params['stats']['fields']) && !empty($params['stats']['fields'])) {
             foreach ($params['stats']['fields'] as $field) {
                 $facet = new Elastica_Facet_Statistical($field);
                 $facet->setParam('field', $field);
                 $query->addFacet($facet);
             }
         } else {
             if (isset($params['facets']['fields']) && !empty($params['facets']['fields'])) {
                 $properties = $this->_getIndexProperties();
                 foreach ($params['facets']['fields'] as $field) {
                     if (array_key_exists($field, $properties)) {
                         $facet = new Elastica_Facet_Terms($field);
                         if ($properties[$field]['type'] == 'multi_field') {
                             $field .= '.untouched';
                         }
                         $facet->setField($field);
                         $facet->setParam('all_terms', true);
                         $facet->setSize($this->getFacetsMaxSize());
                         $query->addFacet($facet);
                     }
                 }
             }
             if (isset($params['facets']['ranges']) && !empty($params['facets']['ranges'])) {
                 foreach ($params['facets']['ranges'] as $field => $ranges) {
                     $facet = new Elastica_Facet_Range($field);
                     $facet->setField($field);
                     $facet->setRanges($ranges);
                     $query->addFacet($facet);
                 }
             }
         }
         if (isset($params['sort']) && !empty($params['sort'])) {
             foreach ($params['sort'] as $sort) {
                 $query->addSort($sort);
             }
         }
         $result = $this->getIndex($this->_index)->getType($type)->search($query);
         return $result;
     }
     return array();
 }