/** * @dataProvider configProvider */ public function testSearchRequest($config) { // Creates a new index 'xodoa' and a type 'user' inside this index $client = new Client($config); $index = $client->getIndex('elastica_test1'); $index->create(array(), true); $type = $index->getType('user'); // Adds 1 document to the index $doc1 = new Document(1, array('username' => 'hans', 'test' => array('2', '3', '5'))); $doc1->setVersion(0); $type->addDocument($doc1); // Adds a list of documents with _bulk upload to the index $docs = array(); $docs[] = new Document(2, array('username' => 'john', 'test' => array('1', '3', '6'))); $docs[] = new Document(3, array('username' => 'rolf', 'test' => array('2', '3', '7'))); $type->addDocuments($docs); // Refresh index $index->refresh(); $resultSet = $type->search('rolf'); $this->assertEquals(1, $resultSet->getTotalHits()); }
/** * Update document, using update script. Requires elasticsearch >= 0.19.0 * * @param int $id document id * @param array|\Elastica\Script|\Elastica\Document $data raw data for request body * @param string $index index to update * @param string $type type of index to update * @param array $options array of query params to use for query. For possible options check es api * @return \Elastica\Response * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html */ public function updateDocument($id, $data, $index, $type, array $options = array()) { $path = $index . '/' . $type . '/' . $id . '/_update'; if ($data instanceof Script) { $requestData = $data->toArray(); } elseif ($data instanceof Document) { $requestData = array('doc' => $data->getData()); if ($data->getDocAsUpsert()) { $requestData['doc_as_upsert'] = true; } $docOptions = $data->getOptions(array('version', 'version_type', 'routing', 'percolate', 'parent', 'fields', 'retry_on_conflict', 'consistency', 'replication', 'refresh', 'timeout')); $options += $docOptions; // set fields param to source only if options was not set before if ($data instanceof Document && ($data->isAutoPopulate() || $this->getConfigValue(array('document', 'autoPopulate'), false)) && !isset($options['fields'])) { $options['fields'] = '_source'; } } else { $requestData = $data; } //If an upsert document exists if ($data instanceof Script || $data instanceof Document) { if ($data->hasUpsert()) { $requestData['upsert'] = $data->getUpsert()->getData(); } } if (!isset($options['retry_on_conflict'])) { $retryOnConflict = $this->getConfig("retryOnConflict"); $options['retry_on_conflict'] = $retryOnConflict; } $response = $this->request($path, Request::POST, $requestData, $options); if ($response->isOk() && $data instanceof Document && ($data->isAutoPopulate() || $this->getConfigValue(array('document', 'autoPopulate'), false))) { $responseData = $response->getData(); if (isset($responseData['_version'])) { $data->setVersion($responseData['_version']); } if (isset($options['fields'])) { $this->_populateDocumentFieldsFromResponse($response, $data, $options['fields']); } } return $response; }
/** * Get the document from search index * * @param string $id Document id * @param array $options Options for the get request. * @throws \Elastica\Exception\NotFoundException * @return \Elastica\Document */ public function getDocument($id, $options = array()) { $path = urlencode($id); try { $result = $this->request($path, Request::GET, array(), $options)->getData(); } catch (ResponseException $e) { throw new NotFoundException('doc id ' . $id . ' not found'); } if (empty($result['exists'])) { throw new NotFoundException('doc id ' . $id . ' not found'); } $data = isset($result['_source']) ? $result['_source'] : array(); $document = new Document($id, $data, $this->getName(), $this->getIndex()); $document->setVersion($result['_version']); return $document; }
/** * Get the document from search index * * @throws \Elastica\Exception\NotFoundException * @throws \Elastica\Exception\ResponseException * * @param string $id Document id * @param array $options Options for the get request. * @return \Elastica\Document */ public function getDocument($id, $options = array()) { $path = urlencode($id); $response = $this->request($path, Request::GET, array(), $options); $result = $response->getData(); if (!isset($result['found']) || $result['found'] === false) { throw new NotFoundException('doc id ' . $id . ' not found'); } if (isset($result['fields'])) { $data = $result['fields']; } elseif (isset($result['_source'])) { $data = $result['_source']; } else { $data = array(); } $document = new Document($id, $data, $this->getName(), $this->getIndex()); $document->setVersion($result['_version']); return $document; }
/** * Get the document from search index * * @param string $id Document id * @param array $options Options for the get request. * @throws \Elastica\Exception\NotFoundException * @return \Elastica\Document */ public function getDocument($id, $options = array()) { $path = urlencode($id); try { $response = $this->request($path, Request::GET, array(), $options); $result = $response->getData(); } catch (ResponseException $e) { throw new NotFoundException('doc id ' . $id . ' not found'); } $info = $response->getTransferInfo(); if ($info['http_code'] !== 200) { throw new NotFoundException('doc id ' . $id . ' not found'); } if (isset($result['fields'])) { $data = $result['fields']; } elseif (isset($result['_source'])) { $data = $result['_source']; } else { $data = array(); } $document = new Document($id, $data, $this->getName(), $this->getIndex()); $document->setVersion($result['_version']); return $document; }