/** * @param Escaper $escaper * @param SearchContext $context * @param string $value * @param bool $updateHighlightSourceRef * @param callable $fieldF * @return callable */ private static function insourceOrIntitle($escaper, $context, $value, $updateHighlightSourceRef, $fieldF) { list($queryString, $fuzzyQuery) = $escaper->fixupWholeQueryString($escaper->fixupQueryStringPart($value)); $field = $fieldF($queryString); $query = new \Elastica\Query\QueryString($queryString); $query->setFields(array($field)); $query->setDefaultOperator('AND'); $query->setAllowLeadingWildcard($escaper->getAllowLeadingWildcard()); $query->setFuzzyPrefixLength(2); $query->setRewrite('top_terms_boost_1024'); $wrappedQuery = $context->wrapInSaferIfPossible($query, false); $updateReferences = function (&$fuzzyQueryRef, &$filterDestinationRef, &$highlightSourceRef, &$searchContainedSyntaxRef) use($fuzzyQuery, $wrappedQuery, $updateHighlightSourceRef) { $fuzzyQueryRef = $fuzzyQuery; $filterDestinationRef[] = new \Elastica\Filter\Query($wrappedQuery); if ($updateHighlightSourceRef) { $highlightSourceRef[] = array('query' => $wrappedQuery); } $searchContainedSyntaxRef = true; }; return $updateReferences; }
/** * @param string[] $fields * @param string $queryString * @param int $phraseSlop * @param boolean $isRescore * @return \Elastica\Query\Simple */ private function buildSearchTextQueryForFields(array $fields, $queryString, $phraseSlop, $isRescore) { $query = new \Elastica\Query\QueryString($queryString); $query->setFields($fields); $query->setAutoGeneratePhraseQueries(true); $query->setPhraseSlop($phraseSlop); $query->setDefaultOperator('AND'); $query->setAllowLeadingWildcard($this->config->get('CirrusSearchAllowLeadingWildcard')); $query->setFuzzyPrefixLength(2); $query->setRewrite('top_terms_boost_1024'); $states = $this->config->get('CirrusSearchQueryStringMaxDeterminizedStates'); if (isset($states)) { // Requires ES 1.4+ $query->setParam('max_determinized_states', $states); } return $this->wrapInSaferIfPossible($query, $isRescore); }