Skip to content

setTerms no longer normalize array parameters in 7.x #2139

@pandafox

Description

@pandafox

in 6.x
https://github.com/ruflin/Elastica/blob/6.x/lib/Elastica/Query/Terms.php#L53

    public function setTerms($key, array $terms)
    {
        $this->_key = $key;
        $this->_terms = array_values($terms);

        return $this;
    }

in 7.x
https://github.com/ruflin/Elastica/blob/7.x/src/Query/Terms.php#L42

    public function setTerms(array $terms): self
    {
        return $this->setParam($this->field, $terms);
    }

    public function setParams(array $params)
    {
        $this->_params = $params;

        return $this;
    }

Which no longer normalize the array.

In normal usage of regular arrays there's no issue, but when an array elements were removed the terms generated aren't recognized properly by ES and results in failed to parse field error

ex:

$array = array(0, 1, 2, 3);php > $array = [0, 123, 456];;
php > unset($array[0]);
php > var_dump($array);
php shell code:1:
array(2) {
  [1] =>
  int(123)
  [2] =>
  int(456)
}

// query output {"1":123,"2":456}

php > var_dump(array_values($array));
php shell code:1:
array(2) {
  [0] =>
  int(123)
  [1] =>
  int(456)
}

// query output [123,456]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions