summaryrefslogtreecommitdiff
path: root/vendor/ruflin/elastica/lib/Elastica/Index.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ruflin/elastica/lib/Elastica/Index.php')
-rw-r--r--vendor/ruflin/elastica/lib/Elastica/Index.php462
1 files changed, 462 insertions, 0 deletions
diff --git a/vendor/ruflin/elastica/lib/Elastica/Index.php b/vendor/ruflin/elastica/lib/Elastica/Index.php
new file mode 100644
index 00000000..5e1e7138
--- /dev/null
+++ b/vendor/ruflin/elastica/lib/Elastica/Index.php
@@ -0,0 +1,462 @@
+<?php
+
+namespace Elastica;
+
+use Elastica\Exception\InvalidException;
+use Elastica\Exception\ResponseException;
+use Elastica\Index\Settings as IndexSettings;
+use Elastica\Index\Stats as IndexStats;
+use Elastica\Index\Status as IndexStatus;
+
+/**
+ * Elastica index object
+ *
+ * Handles reads, deletes and configurations of an index
+ *
+ * @category Xodoa
+ * @package Elastica
+ * @author Nicolas Ruflin <spam@ruflin.com>
+ */
+class Index implements SearchableInterface
+{
+ /**
+ * Index name
+ *
+ * @var string Index name
+ */
+ protected $_name = '';
+
+ /**
+ * Client object
+ *
+ * @var \Elastica\Client Client object
+ */
+ protected $_client = null;
+
+ /**
+ * Creates a new index object
+ *
+ * All the communication to and from an index goes of this object
+ *
+ * @param \Elastica\Client $client Client object
+ * @param string $name Index name
+ * @throws \Elastica\Exception\InvalidException
+ */
+ public function __construct(Client $client, $name)
+ {
+ $this->_client = $client;
+
+ if (!is_string($name)) {
+ throw new InvalidException('Index name should be of type string');
+ }
+ $this->_name = $name;
+ }
+
+ /**
+ * Returns a type object for the current index with the given name
+ *
+ * @param string $type Type name
+ * @return \Elastica\Type Type object
+ */
+ public function getType($type)
+ {
+ return new Type($this, $type);
+ }
+
+ /**
+ * Returns the current status of the index
+ *
+ * @return \Elastica\Index\Status Index status
+ */
+ public function getStatus()
+ {
+ return new IndexStatus($this);
+ }
+
+ /**
+ * Return Index Stats
+ *
+ * @return \Elastica\Index\Stats
+ */
+ public function getStats()
+ {
+ return new IndexStats($this);
+ }
+
+ /**
+ * Gets all the type mappings for an index.
+ *
+ * @return array
+ */
+ public function getMapping()
+ {
+ $path = '_mapping';
+
+ $response = $this->request($path, Request::GET);
+ $data = $response->getData();
+
+ // Get first entry as if index is an Alias, the name of the mapping is the real name and not alias name
+ $mapping = array_shift($data);
+
+ if (isset($mapping['mappings'])) {
+ return $mapping['mappings'];
+ }
+
+ return array();
+ }
+
+ /**
+ * Returns the index settings object
+ *
+ * @return \Elastica\Index\Settings Settings object
+ */
+ public function getSettings()
+ {
+ return new IndexSettings($this);
+ }
+
+ /**
+ * Uses _bulk to send documents to the server
+ *
+ * @param array|\Elastica\Document[] $docs Array of Elastica\Document
+ * @return \Elastica\Bulk\ResponseSet
+ * @link http://www.elasticsearch.org/guide/reference/api/bulk.html
+ */
+ public function updateDocuments(array $docs)
+ {
+ foreach ($docs as $doc) {
+ $doc->setIndex($this->getName());
+ }
+
+ return $this->getClient()->updateDocuments($docs);
+ }
+
+ /**
+ * Uses _bulk to send documents to the server
+ *
+ * @param array|\Elastica\Document[] $docs Array of Elastica\Document
+ * @return \Elastica\Bulk\ResponseSet
+ * @link http://www.elasticsearch.org/guide/reference/api/bulk.html
+ */
+ public function addDocuments(array $docs)
+ {
+ foreach ($docs as $doc) {
+ $doc->setIndex($this->getName());
+ }
+
+ return $this->getClient()->addDocuments($docs);
+ }
+
+ /**
+ * Deletes the index
+ *
+ * @return \Elastica\Response Response object
+ */
+ public function delete()
+ {
+ $response = $this->request('', Request::DELETE);
+
+ return $response;
+ }
+
+ /**
+ * Uses _bulk to delete documents from the server
+ *
+ * @param array|\Elastica\Document[] $docs Array of Elastica\Document
+ * @return \Elastica\Bulk\ResponseSet
+ * @link http://www.elasticsearch.org/guide/reference/api/bulk.html
+ */
+ public function deleteDocuments(array $docs)
+ {
+ foreach ($docs as $doc) {
+ $doc->setIndex($this->getName());
+ }
+
+ return $this->getClient()->deleteDocuments($docs);
+ }
+
+ /**
+ * Optimizes search index
+ *
+ * Detailed arguments can be found here in the link
+ *
+ * @param array $args OPTIONAL Additional arguments
+ * @return array Server response
+ * @link http://www.elasticsearch.org/guide/reference/api/admin-indices-optimize.html
+ */
+ public function optimize($args = array())
+ {
+ $this->request('_optimize', Request::POST, array(), $args);
+ }
+
+ /**
+ * Refreshes the index
+ *
+ * @return \Elastica\Response Response object
+ * @link http://www.elasticsearch.org/guide/reference/api/admin-indices-refresh.html
+ */
+ public function refresh()
+ {
+ return $this->request('_refresh', Request::POST, array());
+ }
+
+ /**
+ * Creates a new index with the given arguments
+ *
+ * @param array $args OPTIONAL Arguments to use
+ * @param bool|array $options OPTIONAL
+ * bool=> Deletes index first if already exists (default = false).
+ * array => Associative array of options (option=>value)
+ * @throws \Elastica\Exception\InvalidException
+ * @throws \Elastica\Exception\ResponseException
+ * @return array Server response
+ * @link http://www.elasticsearch.org/guide/reference/api/admin-indices-create-index.html
+ */
+ public function create(array $args = array(), $options = null)
+ {
+ $path = '';
+ $query = array();
+
+ if (is_bool($options)) {
+ if ($options) {
+ try {
+ $this->delete();
+ } catch (ResponseException $e) {
+ // Table can't be deleted, because doesn't exist
+ }
+ }
+ } else {
+ if (is_array($options)) {
+ foreach ($options as $key => $value) {
+ switch ($key) {
+ case 'recreate' :
+ try {
+ $this->delete();
+ } catch (ResponseException $e) {
+ // Table can't be deleted, because doesn't exist
+ }
+ break;
+ case 'routing' :
+ $query = array('routing' => $value);
+ break;
+ default:
+ throw new InvalidException('Invalid option ' . $key);
+ break;
+ }
+ }
+ }
+ }
+
+ return $this->request($path, Request::PUT, $args, $query);
+ }
+
+ /**
+ * Checks if the given index is already created
+ *
+ * @return bool True if index exists
+ */
+ public function exists()
+ {
+ $response = $this->getClient()->request($this->getName(), Request::HEAD);
+ $info = $response->getTransferInfo();
+
+ return (bool)($info['http_code'] == 200);
+ }
+
+ /**
+ * @param string $query
+ * @param int|array $options
+ * @return \Elastica\Search
+ */
+ public function createSearch($query = '', $options = null)
+ {
+ $search = new Search($this->getClient());
+ $search->addIndex($this);
+ $search->setOptionsAndQuery($options, $query);
+
+ return $search;
+ }
+
+ /**
+ * Searches in this index
+ *
+ * @param string|array|\Elastica\Query $query Array with all query data inside or a Elastica\Query object
+ * @param int|array $options OPTIONAL Limit or associative array of options (option=>value)
+ * @return \Elastica\ResultSet ResultSet with all results inside
+ * @see \Elastica\SearchableInterface::search
+ */
+ public function search($query = '', $options = null)
+ {
+ $search = $this->createSearch($query, $options);
+
+ return $search->search();
+ }
+
+ /**
+ * Counts results of query
+ *
+ * @param string|array|\Elastica\Query $query Array with all query data inside or a Elastica\Query object
+ * @return int number of documents matching the query
+ * @see \Elastica\SearchableInterface::count
+ */
+ public function count($query = '')
+ {
+ $search = $this->createSearch($query);
+
+ return $search->count();
+ }
+
+ /**
+ * Opens an index
+ *
+ * @return \Elastica\Response Response object
+ * @link http://www.elasticsearch.org/guide/reference/api/admin-indices-open-close.html
+ */
+ public function open()
+ {
+ $this->request('_open', Request::POST);
+ }
+
+ /**
+ * Closes the index
+ *
+ * @return \Elastica\Response Response object
+ * @link http://www.elasticsearch.org/guide/reference/api/admin-indices-open-close.html
+ */
+ public function close()
+ {
+ return $this->request('_close', Request::POST);
+ }
+
+ /**
+ * Returns the index name
+ *
+ * @return string Index name
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Returns index client
+ *
+ * @return \Elastica\Client Index client object
+ */
+ public function getClient()
+ {
+ return $this->_client;
+ }
+
+ /**
+ * Adds an alias to the current index
+ *
+ * @param string $name Alias name
+ * @param bool $replace OPTIONAL If set, an existing alias will be replaced
+ * @return \Elastica\Response Response
+ * @link http://www.elasticsearch.org/guide/reference/api/admin-indices-aliases.html
+ */
+ public function addAlias($name, $replace = false)
+ {
+ $path = '_aliases';
+
+ $data = array('actions' => array());
+
+ if ($replace) {
+ $status = new Status($this->getClient());
+ foreach ($status->getIndicesWithAlias($name) as $index) {
+ $data['actions'][] = array('remove' => array('index' => $index->getName(), 'alias' => $name));
+ }
+ }
+
+ $data['actions'][] = array('add' => array('index' => $this->getName(), 'alias' => $name));
+
+ return $this->getClient()->request($path, Request::POST, $data);
+ }
+
+ /**
+ * Removes an alias pointing to the current index
+ *
+ * @param string $name Alias name
+ * @return \Elastica\Response Response
+ * @link http://www.elasticsearch.org/guide/reference/api/admin-indices-aliases.html
+ */
+ public function removeAlias($name)
+ {
+ $path = '_aliases';
+
+ $data = array('actions' => array(array('remove' => array('index' => $this->getName(), 'alias' => $name))));
+
+ return $this->getClient()->request($path, Request::POST, $data);
+ }
+
+ /**
+ * Clears the cache of an index
+ *
+ * @return \Elastica\Response Response object
+ * @link http://www.elasticsearch.org/guide/reference/api/admin-indices-clearcache.html
+ */
+ public function clearCache()
+ {
+ $path = '_cache/clear';
+ // TODO: add additional cache clean arguments
+ return $this->request($path, Request::POST);
+ }
+
+ /**
+ * Flushes the index to storage
+ *
+ * @return \Elastica\Response Response object
+ * @link http://www.elasticsearch.org/guide/reference/api/admin-indices-flush.html
+ */
+ public function flush($refresh = false)
+ {
+ $path = '_flush';
+ return $this->request($path, Request::POST, array(), array('refresh' => $refresh));
+ }
+
+ /**
+ * Can be used to change settings during runtime. One example is to use
+ * if for bulk updating {@link http://www.elasticsearch.org/blog/2011/03/23/update-settings.html}
+ *
+ * @param array $data Data array
+ * @return \Elastica\Response Response object
+ * @link http://www.elasticsearch.org/guide/reference/api/admin-indices-update-settings.html
+ */
+ public function setSettings(array $data)
+ {
+ return $this->request('_settings', Request::PUT, $data);
+ }
+
+ /**
+ * Makes calls to the elasticsearch server based on this index
+ *
+ * @param string $path Path to call
+ * @param string $method Rest method to use (GET, POST, DELETE, PUT)
+ * @param array $data OPTIONAL Arguments as array
+ * @param array $query OPTIONAL Query params
+ * @return \Elastica\Response Response object
+ */
+ public function request($path, $method, $data = array(), array $query = array())
+ {
+ $path = $this->getName() . '/' . $path;
+
+ return $this->getClient()->request($path, $method, $data, $query);
+ }
+
+ /**
+ * Analyzes a string
+ *
+ * Detailed arguments can be found here in the link
+ *
+ * @param string $text String to be analyzed
+ * @param array $args OPTIONAL Additional arguments
+ * @return array Server response
+ * @link http://www.elasticsearch.org/guide/reference/api/admin-indices-analyze.html
+ */
+ public function analyze($text, $args = array())
+ {
+ $data = $this->request('_analyze', Request::POST, $text, $args)->getData();
+ return $data['tokens'];
+ }
+}