/** * {@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; }
/** * {@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'); } } }
/** * {@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); }
/** * {@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; }
/** * {@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); } }
/** * {@inheritdoc} */ public function warmUp(Search $search) { $search->addQuery(new MatchAllQuery()); }
/** * 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); }
/** * {@inheritdoc} */ public function preProcessSearch(Search $search, Search $relatedSearch, FilterState $state = null) { $stateAgg = new StatsAggregation('date_range_agg'); $stateAgg->setField($this->getField()); $search->addAggregation($stateAgg); }
/** * {@inheritdoc} */ public function modifySearch(Search $search, FilterState $state = null, SearchRequest $request = null) { $filter = new MissingFilter($this->getField()); $search->addFilter($filter, BoolFilter::MUST); }
/** * 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()); }