Ejemplo n.º 1
0
 /**
  * @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());
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }
Ejemplo n.º 3
0
 /**
  * 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;
 }
Ejemplo n.º 4
0
 /**
  * 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;
 }
Ejemplo n.º 5
0
 /**
  * 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;
 }