SphinxClient::UpdateAttributes PHP Method

UpdateAttributes() public method

returns amount of updated documents (0 or more) on success, or -1 on failure
public UpdateAttributes ( $index, $attrs, $values, $mva = false )
    function UpdateAttributes($index, $attrs, $values, $mva = false)
    {
        // verify everything
        assert(is_string($index));
        assert(is_bool($mva));
        assert(is_array($attrs));
        foreach ($attrs as $attr) {
            assert(is_string($attr));
        }
        assert(is_array($values));
        foreach ($values as $id => $entry) {
            assert(is_numeric($id));
            assert(is_array($entry));
            assert(count($entry) == count($attrs));
            foreach ($entry as $v) {
                if ($mva) {
                    assert(is_array($v));
                    foreach ($v as $vv) {
                        assert(is_int($vv));
                    }
                } else {
                    assert(is_int($v));
                }
            }
        }
        // build request
        $this->_MBPush();
        $req = pack("N", strlen($index)) . $index;
        $req .= pack("N", count($attrs));
        foreach ($attrs as $attr) {
            $req .= pack("N", strlen($attr)) . $attr;
            $req .= pack("N", $mva ? 1 : 0);
        }
        $req .= pack("N", count($values));
        foreach ($values as $id => $entry) {
            $req .= sphPackU64($id);
            foreach ($entry as $v) {
                $req .= pack("N", $mva ? count($v) : $v);
                if ($mva) {
                    foreach ($v as $vv) {
                        $req .= pack("N", $vv);
                    }
                }
            }
        }
        // connect, send query, get response
        if (!($fp = $this->_Connect())) {
            $this->_MBPop();
            return -1;
        }
        $len = strlen($req);
        $req = pack("nnN", SEARCHD_COMMAND_UPDATE, VER_COMMAND_UPDATE, $len) . $req;
        // add header
        if (!$this->_Send($fp, $req, $len + 8)) {
            $this->_MBPop();
            return -1;
        }
        if (!($response = $this->_GetResponse($fp, VER_COMMAND_UPDATE))) {
            $this->_MBPop();
            return -1;
        }
        // parse response
        list(, $updated) = unpack("N*", substr($response, 0, 4));
        $this->_MBPop();
        return $updated;
    }

Usage Example

 /**
  * {@inheritdoc}
  */
 public function removeRecord(\record_adapter $record)
 {
     if (!$this->rt_conn) {
         throw new RuntimeException('Unable to connect to sphinx real-time index');
     }
     $CRCdatabox = $this->CRCdatabox($record->get_databox());
     $indexes = ["metadatas" . $CRCdatabox, "metadatas" . $CRCdatabox . "_stemmed_en", "metadatas" . $CRCdatabox . "_stemmed_fr", "metadatas" . $CRCdatabox . "_stemmed_de", "metadatas" . $CRCdatabox . "_stemmed_nl"];
     $RTindexes = ["metas_realtime" . $CRCdatabox, "metas_realtime_stemmed_fr_" . $CRCdatabox, "metas_realtime_stemmed_en_" . $CRCdatabox, "metas_realtime_stemmed_nl_" . $CRCdatabox, "metas_realtime_stemmed_de_" . $CRCdatabox];
     foreach ($record->get_caption()->get_fields(null, true) as $field) {
         foreach ($field->get_values() as $value) {
             foreach ($indexes as $index) {
                 $this->sphinx->UpdateAttributes($index, ["deleted"], [$value->getId() => [1]]);
             }
             foreach ($RTindexes as $index) {
                 $this->rt_conn->exec("DELETE FROM " . $index . " WHERE id = " . $value->getId());
             }
         }
     }
     $indexes = ["documents" . $CRCdatabox, "documents" . $CRCdatabox . "_stemmed_fr", "documents" . $CRCdatabox . "_stemmed_en", "documents" . $CRCdatabox . "_stemmed_de", "documents" . $CRCdatabox . "_stemmed_nl"];
     $RTindexes = ["docs_realtime" . $CRCdatabox, "docs_realtime_stemmed_fr_" . $CRCdatabox, "docs_realtime_stemmed_en_" . $CRCdatabox, "docs_realtime_stemmed_nl_" . $CRCdatabox, "docs_realtime_stemmed_de_" . $CRCdatabox];
     foreach ($indexes as $index) {
         $this->sphinx->UpdateAttributes($index, ["deleted"], [$record->get_record_id() => [1]]);
     }
     foreach ($RTindexes as $index) {
         $this->rt_conn->exec("DELETE FROM " . $index . " WHERE id = " . $record->get_record_id());
     }
     return $this;
 }
All Usage Examples Of SphinxClient::UpdateAttributes