Ejemplo n.º 1
0
 /**
  * {@inheritdoc}
  */
 public function modifySearch(Search $search, FilterState $state = null, SearchRequest $request = null)
 {
     if ($state && $state->isActive()) {
         $filter = new RangeFilter($this->getField(), $state->getValue());
         $search->addPostFilter($filter);
     }
 }
 /**
  * Data provider for testIteration.
  *
  * @return array
  */
 public function getIterationData()
 {
     $out = [];
     // Case #0: no search type set, with a sort, results should be sorted.
     $search = new Search();
     $search->setSize(2);
     $search->setScroll('1m');
     $search->addSort(new Sort('header'));
     $search->addQuery(new MatchAllQuery());
     $out[] = ['search' => $search, true];
     // Case #1: search type set to scan, with a sort, results should not be sorted.
     $search = new Search();
     $search->setSize(2);
     $search->setScroll('1m');
     $search->setSearchType('scan');
     $search->addSort(new Sort('header'));
     $search->addQuery(new MatchAllQuery());
     $out[] = ['search' => $search, false];
     // Case #3: minimum size, should give the same results.
     $search = new Search();
     $search->setSize(1);
     $search->setScroll('1m');
     $search->addSort(new Sort('header'));
     $search->addQuery(new MatchAllQuery());
     $out[] = ['search' => $search, true];
     return $out;
 }
Ejemplo n.º 3
0
 /**
  * {@inheritdoc}
  */
 public function modifySearch(Search $search, FilterState $state = null, SearchRequest $request = null)
 {
     if ($state && $state->isActive()) {
         if (strpos($this->getField(), ',') !== false) {
             $subQuery = new BoolQuery();
             foreach (explode(',', $this->getField()) as $field) {
                 $subQuery->add(new FuzzyQuery($field, $state->getValue(), $this->getParameters()), 'should');
             }
             $search->addQuery($subQuery, 'must');
         } else {
             $search->addQuery(new FuzzyQuery($this->getField(), $state->getValue(), $this->getParameters()), 'must');
         }
     }
 }
Ejemplo n.º 4
0
 /**
  * {@inheritdoc}
  */
 public function getAction(RestRequest $restRequest, $id = null)
 {
     if ($id !== null) {
         $data = $restRequest->getRepository()->find($id, Repository::RESULTS_ARRAY);
         if ($data === null) {
             return $this->renderRest(null, Response::HTTP_NOT_FOUND);
         }
     } else {
         $search = new Search();
         !$restRequest->query->has('from') ?: $search->setFrom($restRequest->query->get('from'));
         !$restRequest->query->has('size') ?: $search->setSize($restRequest->query->get('size'));
         $data = $restRequest->getRepository()->execute($search, Repository::RESULTS_ARRAY);
     }
     return $this->renderRest($data);
 }
Ejemplo n.º 5
0
 /**
  * {@inheritdoc}
  */
 public function modifySearch(Search $search, FilterState $state = null, SearchRequest $request = null)
 {
     if ($state && $state->isActive()) {
         $search->setFrom($this->countPerPage * ($state->getValue() - 1));
     }
     $search->setSize($this->countPerPage);
 }
 /**
  * @return Search
  */
 public function getTestSubAggregationsData()
 {
     $out = [];
     // Case 0: top hits aggregation inside ranges.
     $search = new Search();
     $rangeAgg = new RangeAggregation('range');
     $rangeAgg->setField('price');
     $rangeAgg->addRange(null, 15);
     $rangeAgg->addRange(15);
     $topHitsAgg = new TopHitsAggregation('top_hits');
     $topHitsAgg->setSort(new Sorts(new Sort('price', Sort::ORDER_DESC)));
     $rangeAgg->addAggregation($topHitsAgg);
     $search->addAggregation($rangeAgg);
     $expectedTopHits = [[1], [2, 3]];
     $out[] = [$search, $expectedTopHits];
     return $out;
 }
Ejemplo n.º 7
0
 /**
  * {@inheritdoc}
  */
 public function modifySearch(Search $search, FilterState $state = null, SearchRequest $request = null)
 {
     if ($state && $state->isActive()) {
         $stateValue = $state->getValue();
         if (!empty($this->choices[$stateValue]['fields'])) {
             foreach ($this->choices[$stateValue]['fields'] as $sortField) {
                 $search->addSort(new EsSort($sortField['field'], $sortField['order'], null, $sortField['mode']));
             }
         } else {
             $sortField = $this->choices[$stateValue];
             $search->addSort(new EsSort($sortField['field'], $sortField['order'], null, $sortField['mode']));
         }
     } else {
         foreach ($this->choices as $choice) {
             if ($choice['default']) {
                 $search->addSort(new EsSort($choice['field'], $choice['order']));
                 break;
             }
         }
     }
 }
 /**
  * {@inheritdoc}
  */
 public function preProcessSearch(Search $search, Search $relatedSearch, FilterState $state = null)
 {
     $name = $state ? $state->getName() : $this->getField();
     $aggregation = new TermsAggregation($name);
     $aggregation->setField($this->getField());
     if ($this->getSortType()) {
         $aggregation->addParameter('order', [$this->getSortType()['type'] => $this->getSortType()['order']]);
     }
     $aggregation->addParameter('size', 0);
     if ($this->getSize() > 0) {
         $aggregation->addParameter('size', $this->getSize());
     }
     if ($relatedSearch->getPostFilters()) {
         $filterAggregation = new FilterAggregation($name . '-filter');
         $filterAggregation->setFilter($relatedSearch->getPostFilters());
         $filterAggregation->addAggregation($aggregation);
         $search->addAggregation($filterAggregation);
     } else {
         $search->addAggregation($aggregation);
     }
 }
Ejemplo n.º 9
0
 /**
  * {@inheritdoc}
  */
 public function warmUp(Search $search)
 {
     $search->addQuery(new MatchAllQuery());
 }
Ejemplo n.º 10
0
 /**
  * Delete by query.
  *
  * @param Search $search
  *
  * @return array
  */
 public function deleteByQuery(Search $search)
 {
     $results = $this->getManager()->getConnection()->deleteByQuery($this->types, $search->toArray());
     return new IndicesResult($results);
 }
Ejemplo n.º 11
0
 /**
  * {@inheritdoc}
  */
 public function preProcessSearch(Search $search, Search $relatedSearch, FilterState $state = null)
 {
     $stateAgg = new StatsAggregation('date_range_agg');
     $stateAgg->setField($this->getField());
     $search->addAggregation($stateAgg);
 }
Ejemplo n.º 12
0
 /**
  * {@inheritdoc}
  */
 public function modifySearch(Search $search, FilterState $state = null, SearchRequest $request = null)
 {
     $filter = new MissingFilter($this->getField());
     $search->addFilter($filter, BoolFilter::MUST);
 }
Ejemplo n.º 13
0
 /**
  * Check if `token_count` field works as expected.
  */
 public function testPersistTokenCountField()
 {
     $manager = $this->getManager();
     $colorDocument = new ColorDocument();
     $colorDocument->piecesCount = 't e s t';
     $manager->persist($colorDocument);
     $manager->commit();
     $repository = $manager->getRepository('AcmeTestBundle:ColorDocument');
     // Analyzer is whitespace, so there are four tokens.
     $search = new Search();
     $search->addQuery(new TermQuery('pieces_count.count', '4'));
     $this->assertEquals(1, $repository->execute($search)->getTotalCount());
     // Test with invalid count.
     $search = new Search();
     $search->addQuery(new TermQuery('pieces_count.count', '6'));
     $this->assertEquals(0, $repository->execute($search)->getTotalCount());
 }