Set the minimum number of of should match.
public setMinimumNumberShouldMatch ( integer $minimumNumberShouldMatch ) | ||
$minimumNumberShouldMatch | integer | Should match minimum |
/** * @group unit */ public function testToArray() { $query = new BoolQuery(); $idsQuery1 = new Ids(); $idsQuery1->setIds(1); $idsQuery2 = new Ids(); $idsQuery2->setIds(2); $idsQuery3 = new Ids(); $idsQuery3->setIds(3); $filter1 = new TermFilter(); $filter1->setTerm('test', '1'); $filter2 = new TermFilter(); $filter2->setTerm('username', 'ruth'); $boost = 1.2; $minMatch = 2; $query->setBoost($boost); $query->setMinimumNumberShouldMatch($minMatch); $query->addMust($idsQuery1); $query->addMustNot($idsQuery2); $query->addShould($idsQuery3->toArray()); $query->addFilter($filter1); $query->addFilter($filter2); $expectedArray = array('bool' => array('must' => array($idsQuery1->toArray()), 'should' => array($idsQuery3->toArray()), 'filter' => array($filter1->toArray(), $filter2->toArray()), 'minimum_number_should_match' => $minMatch, 'must_not' => array($idsQuery2->toArray()), 'boost' => $boost)); $this->assertEquals($expectedArray, $query->toArray()); }
/** * @param string[] $fields * @param string[] $nearMatchFields * @param string $queryString * @param string $nearMatchQuery * @return \Elastica\Query\Simple|\Elastica\Query\BoolQuery */ private function buildSearchTextQuery(array $fields, array $nearMatchFields, $queryString, $nearMatchQuery) { $queryForMostFields = $this->buildSearchTextQueryForFields($fields, $queryString, $this->config->getElement('CirrusSearchPhraseSlop', 'default'), false); if ($nearMatchQuery) { // Build one query for the full text fields and one for the near match fields so that // the near match can run unescaped. $BoolQuery = new \Elastica\Query\BoolQuery(); $BoolQuery->setMinimumNumberShouldMatch(1); $BoolQuery->addShould($queryForMostFields); $nearMatch = new \Elastica\Query\MultiMatch(); $nearMatch->setFields($nearMatchFields); $nearMatch->setQuery($nearMatchQuery); $BoolQuery->addShould($nearMatch); return $BoolQuery; } return $queryForMostFields; }
/** * @param BoolOr $nestedOrFilter Nested or filter * @param string $nestedProperty Nested property (can be 'variants') */ private function addAvailableProductsVariantFilters(BoolOr $nestedOrFilter, $nestedProperty) { $variantsNestedBool = new BoolQuery(); $variantsNestedBool->setMinimumNumberShouldMatch(1); $availableOn = new QueryRange($nestedProperty . '.availableOn', array('lte' => "now")); $variantsNestedBool->addMust($availableOn); $availableUntil = new Filtered(); $availableUntilFilter = new BoolOr(); $availableUntilNull = new Missing($nestedProperty . '.availableUntil'); $availableUntilFilter->addFilter($availableUntilNull); $availableUntilGte = new FilterRange($nestedProperty . '.availableUntil', array('gte' => time())); $availableUntilFilter->addFilter($availableUntilGte); $availableUntil->setFilter($availableUntilFilter); $variantsNestedBool->addMust($availableUntil); $availableOnDemand = new QueryTerm(array($nestedProperty . '.availableOnDemand' => true)); $variantsNestedBool->addShould($availableOnDemand); $onHand = new QueryRange($nestedProperty . '.onHand', array('gt' => 0)); $variantsNestedBool->addShould($onHand); $nested = new Nested(); $nested->setPath($nestedProperty); $nested->setQuery($variantsNestedBool); $nestedOrFilter->addFilter($nested); }