/** * Find all documents where the value is matched in the fields. The type option * allows you to specify the type of match, can be best_fields, most_fields, * cross_fields, phrase, phrase_prefix. * * best_fields finds documents which match any field, but uses the _score * from the best field. * * most_fields finds documents which match any field and combines the _score * from each field. * * cross_fields treats fields with the same analyzer as though they were * one big field. Looks for each word in any field. * * phrase runs a match_phrase query on each field and combines the _score * from each field. * * phrase_prefix runs a match_phrase_prefix query on each field and combines * the _score from each field. * * @link https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html * * @param array $fields The fields to search in * @param string $query The string to search for * @param string $type The match type * @param bool $fuzzy Set whether the match should be fuzzy * @param float $tieBreaker Can be between 0.0 and 1.0 * @param string $operator Can be 'and' or 'or' * @return Query */ public function multiMatch(array $fields, $query, $type = 'phrase', $fuzzy = false, $tieBreaker = 0.0, $operator = 'and') { $match = new MultiMatch(); $match->setFields($fields); $match->setQuery($query); $match->setType($type); if ($fuzzy) { $match->setFuzziness('AUTO'); } if ($type == 'best_fields') { $match->setTieBreaker($tieBreaker); } if ($type == 'cross_fields') { $match->setOperator($operator); } $query = $this->newQuery($match); $this->query[] = $query; return $query; }