* * @link https://www.elastic.co/guide/en/elasticsearch/reference/1.7/query-dsl-flt-query.html * * @since 2016.05 * @ingroup TTMServer */ class FuzzyLikeThis extends \Elastica\Query\AbstractQuery { // phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore /** * Field names. * * @var array Field names */ protected $_fields = []; /** * Like text. * * @var string Like text */ protected $_likeText = ''; /** * Ignore term frequency. * * @var bool ignore term frequency */ protected $_ignoreTF = false; /** * Max query terms value. * * @var int Max query terms value */ protected $_maxQueryTerms = 25; /** * fuzziness. * * @var int fuzziness */ protected $_fuzziness = 2; /** * Prefix Length. * * @var int Prefix Length */ protected $_prefixLength = 0; /** * Analyzer. * * @var string Analyzer */ protected $_analyzer; // phpcs:enable /** * Adds field to flt query. * * @param array $fields Field names * * @return $this */ public function addFields( array $fields ) { $this->_fields = $fields; return $this; } /** * Set the "like_text" value. * * @param string $text * * @return $this */ public function setLikeText( $text ) { $text = trim( $text ); $this->_likeText = $text; return $this; } /** * Set the "ignore_tf" value (ignore term frequency). * * @param bool $ignoreTF * * @return $this */ public function setIgnoreTF( $ignoreTF ) { $this->_ignoreTF = (bool)$ignoreTF; return $this; } /** * Set the minimum similarity. * * @param int $value * * @return $this */ public function setFuzziness( $value ) { $value = (int)$value; $this->_fuzziness = $value; return $this; } /** * Set Prefix Length. * * @param int $value Prefix length * * @return $this */ public function setPrefixLength( $value ) { $this->_prefixLength = (int)$value; return $this; } /** * Set max_query_terms. * * @param int $value Max query terms value * * @return $this */ public function setMaxQueryTerms( $value ) { $this->_maxQueryTerms = (int)$value; return $this; } /** * Set analyzer. * * @param string $text Analyzer text * * @return $this */ public function setAnalyzer( $text ) { $text = trim( $text ); $this->_analyzer = $text; return $this; } /** * Converts fuzzy like this query to array. * * @return array Query array * * @see \Elastica\Query\AbstractQuery::toArray() */ public function toArray() { if ( !empty( $this->_fields ) ) { $args['fields'] = $this->_fields; } if ( !empty( $this->_analyzer ) ) { $args['analyzer'] = $this->_analyzer; } $args['fuzziness'] = ( $this->_fuzziness > 0 ) ? $this->_fuzziness : 0; $args['like_text'] = $this->_likeText; $args['prefix_length'] = $this->_prefixLength; $args['ignore_tf'] = $this->_ignoreTF; $args['max_query_terms'] = $this->_maxQueryTerms; $data = parent::toArray(); $args = array_merge( $args, $data['fuzzy_like_this'] ); return [ 'fuzzy_like_this' => $args ]; } }