diff options
Diffstat (limited to 'scripts/external_libs/elasticsearch/elasticsearch/client/__init__.py')
-rw-r--r-- | scripts/external_libs/elasticsearch/elasticsearch/client/__init__.py | 1517 |
1 files changed, 1517 insertions, 0 deletions
diff --git a/scripts/external_libs/elasticsearch/elasticsearch/client/__init__.py b/scripts/external_libs/elasticsearch/elasticsearch/client/__init__.py new file mode 100644 index 00000000..94aa9a61 --- /dev/null +++ b/scripts/external_libs/elasticsearch/elasticsearch/client/__init__.py @@ -0,0 +1,1517 @@ +from __future__ import unicode_literals +import logging + +from ..transport import Transport +from ..exceptions import TransportError +from ..compat import string_types, urlparse +from .indices import IndicesClient +from .ingest import IngestClient +from .cluster import ClusterClient +from .cat import CatClient +from .nodes import NodesClient +from .snapshot import SnapshotClient +from .tasks import TasksClient +from .utils import query_params, _make_path, SKIP_IN_PATH + +logger = logging.getLogger('elasticsearch') + +def _normalize_hosts(hosts): + """ + Helper function to transform hosts argument to + :class:`~elasticsearch.Elasticsearch` to a list of dicts. + """ + # if hosts are empty, just defer to defaults down the line + if hosts is None: + return [{}] + + # passed in just one string + if isinstance(hosts, string_types): + hosts = [hosts] + + out = [] + # normalize hosts to dicts + for host in hosts: + if isinstance(host, string_types): + if '://' not in host: + host = "//%s" % host + + parsed_url = urlparse(host) + h = {"host": parsed_url.hostname} + + if parsed_url.port: + h["port"] = parsed_url.port + + if parsed_url.scheme == "https": + h['port'] = parsed_url.port or 443 + h['use_ssl'] = True + h['scheme'] = 'http' + elif parsed_url.scheme: + h['scheme'] = parsed_url.scheme + + if parsed_url.username or parsed_url.password: + h['http_auth'] = '%s:%s' % (parsed_url.username, parsed_url.password) + + if parsed_url.path and parsed_url.path != '/': + h['url_prefix'] = parsed_url.path + + out.append(h) + else: + out.append(host) + return out + + +class Elasticsearch(object): + """ + Elasticsearch low-level client. Provides a straightforward mapping from + Python to ES REST endpoints. + + The instance has attributes ``cat``, ``cluster``, ``indices``, ``ingest``, + ``nodes``, ``snapshot`` and ``tasks`` that provide access to instances of + :class:`~elasticsearch.client.CatClient`, + :class:`~elasticsearch.client.ClusterClient`, + :class:`~elasticsearch.client.IndicesClient`, + :class:`~elasticsearch.client.IngestClient`, + :class:`~elasticsearch.client.NodesClient`, + :class:`~elasticsearch.client.SnapshotClient` and + :class:`~elasticsearch.client.TasksClient` respectively. This is the + preferred (and only supported) way to get access to those classes and their + methods. + + You can specify your own connection class which should be used by providing + the ``connection_class`` parameter:: + + # create connection to localhost using the ThriftConnection + es = Elasticsearch(connection_class=ThriftConnection) + + If you want to turn on :ref:`sniffing` you have several options (described + in :class:`~elasticsearch.Transport`):: + + # create connection that will automatically inspect the cluster to get + # the list of active nodes. Start with nodes running on 'esnode1' and + # 'esnode2' + es = Elasticsearch( + ['esnode1', 'esnode2'], + # sniff before doing anything + sniff_on_start=True, + # refresh nodes after a node fails to respond + sniff_on_connection_fail=True, + # and also every 60 seconds + sniffer_timeout=60 + ) + + Different hosts can have different parameters, use a dictionary per node to + specify those:: + + # connect to localhost directly and another node using SSL on port 443 + # and an url_prefix. Note that ``port`` needs to be an int. + es = Elasticsearch([ + {'host': 'localhost'}, + {'host': 'othernode', 'port': 443, 'url_prefix': 'es', 'use_ssl': True}, + ]) + + If using SSL, there are several parameters that control how we deal with + certificates (see :class:`~elasticsearch.Urllib3HttpConnection` for + detailed description of the options):: + + es = Elasticsearch( + ['localhost:443', 'other_host:443'], + # turn on SSL + use_ssl=True, + # make sure we verify SSL certificates (off by default) + verify_certs=True, + # provide a path to CA certs on disk + ca_certs='/path/to/CA_certs' + ) + + SSL client authentication is supported + (see :class:`~elasticsearch.Urllib3HttpConnection` for + detailed description of the options):: + + es = Elasticsearch( + ['localhost:443', 'other_host:443'], + # turn on SSL + use_ssl=True, + # make sure we verify SSL certificates (off by default) + verify_certs=True, + # provide a path to CA certs on disk + ca_certs='/path/to/CA_certs', + # PEM formatted SSL client certificate + client_cert='/path/to/clientcert.pem', + # PEM formatted SSL client key + client_key='/path/to/clientkey.pem' + ) + + Alternatively you can use RFC-1738 formatted URLs, as long as they are not + in conflict with other options:: + + es = Elasticsearch( + [ + 'http://user:secret@localhost:9200/', + 'https://user:secret@other_host:443/production' + ], + verify_certs=True + ) + + """ + def __init__(self, hosts=None, transport_class=Transport, **kwargs): + """ + :arg hosts: list of nodes we should connect to. Node should be a + dictionary ({"host": "localhost", "port": 9200}), the entire dictionary + will be passed to the :class:`~elasticsearch.Connection` class as + kwargs, or a string in the format of ``host[:port]`` which will be + translated to a dictionary automatically. If no value is given the + :class:`~elasticsearch.Urllib3HttpConnection` class defaults will be used. + + :arg transport_class: :class:`~elasticsearch.Transport` subclass to use. + + :arg kwargs: any additional arguments will be passed on to the + :class:`~elasticsearch.Transport` class and, subsequently, to the + :class:`~elasticsearch.Connection` instances. + """ + self.transport = transport_class(_normalize_hosts(hosts), **kwargs) + + # namespaced clients for compatibility with API names + self.indices = IndicesClient(self) + self.ingest = IngestClient(self) + self.cluster = ClusterClient(self) + self.cat = CatClient(self) + self.nodes = NodesClient(self) + self.snapshot = SnapshotClient(self) + self.tasks = TasksClient(self) + + def __repr__(self): + try: + # get a lost of all connections + cons = self.transport.hosts + # truncate to 10 if there are too many + if len(cons) > 5: + cons = cons[:5] + ['...'] + return '<Elasticsearch(%r)>' % cons + except: + # probably operating on custom transport and connection_pool, ignore + return super(Elasticsearch, self).__repr__() + + def _bulk_body(self, body): + # if not passed in a string, serialize items and join by newline + if not isinstance(body, string_types): + body = '\n'.join(map(self.transport.serializer.dumps, body)) + + # bulk body must end with a newline + if not body.endswith('\n'): + body += '\n' + + return body + + @query_params() + def ping(self, params=None): + """ + Returns True if the cluster is up, False otherwise. + `<http://www.elastic.co/guide/>`_ + """ + try: + return self.transport.perform_request('HEAD', '/', params=params) + except TransportError: + return False + + @query_params() + def info(self, params=None): + """ + Get the basic info from the current cluster. + `<http://www.elastic.co/guide/>`_ + """ + return self.transport.perform_request('GET', '/', params=params) + + @query_params('parent', 'pipeline', 'refresh', 'routing', + 'timeout', 'timestamp', 'ttl', 'version', 'version_type') + def create(self, index, doc_type, id, body, params=None): + """ + Adds a typed JSON document in a specific index, making it searchable. + Behind the scenes this method calls index(..., op_type='create') + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html>`_ + + :arg index: The name of the index + :arg doc_type: The type of the document + :arg id: Document ID + :arg body: The document + :arg parent: ID of the parent document + :arg pipeline: The pipeline id to preprocess incoming documents with + :arg refresh: If `true` then refresh the affected shards to make this + operation visible to search, if `wait_for` then wait for a refresh + to make this operation visible to search, if `false` (the default) + then do nothing with refreshes., valid choices are: u'true', + u'false', u'wait_for' + :arg routing: Specific routing value + :arg timeout: Explicit operation timeout + :arg timestamp: Explicit timestamp for the document + :arg ttl: Expiration time for the document + :arg version: Explicit version number for concurrency control + :arg version_type: Specific version type, valid choices are: + u'internal', u'external', u'external_gte', u'force' + :arg wait_for_active_shards: Sets the number of shard copies that must + be active before proceeding with the index operation. Defaults to 1, + meaning the primary shard only. Set to `all` for all shard copies, + otherwise set to any non-negative value less than or equal to the + total number of copies for the shard (number of replicas + 1) + """ + for param in (index, doc_type, id, body): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('PUT', _make_path(index, doc_type, + id, '_create'), params=params, body=body) + + @query_params('op_type', 'parent', 'pipeline', 'refresh', 'routing', + 'timeout', 'timestamp', 'ttl', 'version', 'version_type', + 'wait_for_active_shards') + def index(self, index, doc_type, body, id=None, params=None): + """ + Adds or updates a typed JSON document in a specific index, making it searchable. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html>`_ + + :arg index: The name of the index + :arg doc_type: The type of the document + :arg body: The document + :arg id: Document ID + :arg op_type: Explicit operation type, default 'index', valid choices + are: 'index', 'create' + :arg parent: ID of the parent document + :arg pipeline: The pipeline id to preprocess incoming documents with + :arg refresh: If `true` then refresh the affected shards to make this + operation visible to search, if `wait_for` then wait for a refresh + to make this operation visible to search, if `false` (the default) + then do nothing with refreshes., valid choices are: u'true', + u'false', u'wait_for' + :arg routing: Specific routing value + :arg timeout: Explicit operation timeout + :arg timestamp: Explicit timestamp for the document + :arg ttl: Expiration time for the document + :arg version: Explicit version number for concurrency control + :arg version_type: Specific version type, valid choices are: 'internal', + 'external', 'external_gte', 'force' + :arg wait_for_active_shards: Sets the number of shard copies that must + be active before proceeding with the index operation. Defaults to 1, + meaning the primary shard only. Set to `all` for all shard copies, + otherwise set to any non-negative value less than or equal to the + total number of copies for the shard (number of replicas + 1) + """ + for param in (index, doc_type, body): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('POST' if id in SKIP_IN_PATH else 'PUT', + _make_path(index, doc_type, id), params=params, body=body) + + @query_params('parent', 'preference', 'realtime', 'refresh', 'routing') + def exists(self, index, doc_type, id, params=None): + """ + Returns a boolean indicating whether or not given document exists in Elasticsearch. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html>`_ + + :arg index: The name of the index + :arg doc_type: The type of the document (use `_all` to fetch the first + document matching the ID across all types) + :arg id: The document ID + :arg parent: The ID of the parent document + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg realtime: Specify whether to perform the operation in realtime or + search mode + :arg refresh: Refresh the shard containing the document before + performing the operation + :arg routing: Specific routing value + """ + for param in (index, doc_type, id): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('HEAD', _make_path(index, + doc_type, id), params=params) + + @query_params('_source', '_source_exclude', '_source_include', 'parent', + 'preference', 'realtime', 'refresh', 'routing', 'stored_fields', + 'version', 'version_type') + def get(self, index, id, doc_type='_all', params=None): + """ + Get a typed JSON document from the index based on its id. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html>`_ + + :arg index: The name of the index + :arg doc_type: The type of the document (use `_all` to fetch the first + document matching the ID across all types) + :arg id: The document ID + :arg _source: True or false to return the _source field or not, or a + list of fields to return + :arg _source_exclude: A list of fields to exclude from the returned + _source field + :arg _source_include: A list of fields to extract and return from the + _source field + :arg parent: The ID of the parent document + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg realtime: Specify whether to perform the operation in realtime or + search mode + :arg refresh: Refresh the shard containing the document before + performing the operation + :arg routing: Specific routing value + :arg stored_fields: A comma-separated list of stored fields to return in + the response + :arg version: Explicit version number for concurrency control + :arg version_type: Specific version type, valid choices are: 'internal', + 'external', 'external_gte', 'force' + """ + for param in (index, doc_type, id): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('GET', _make_path(index, + doc_type, id), params=params) + + @query_params('_source', '_source_exclude', '_source_include', 'parent', + 'preference', 'realtime', 'refresh', 'routing', 'version', + 'version_type') + def get_source(self, index, doc_type, id, params=None): + """ + Get the source of a document by it's index, type and id. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html>`_ + + :arg index: The name of the index + :arg doc_type: The type of the document; use `_all` to fetch the first + document matching the ID across all types + :arg id: The document ID + :arg _source: True or false to return the _source field or not, or a + list of fields to return + :arg _source_exclude: A list of fields to exclude from the returned + _source field + :arg _source_include: A list of fields to extract and return from the + _source field + :arg parent: The ID of the parent document + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg realtime: Specify whether to perform the operation in realtime or + search mode + :arg refresh: Refresh the shard containing the document before + performing the operation + :arg routing: Specific routing value + :arg version: Explicit version number for concurrency control + :arg version_type: Specific version type, valid choices are: 'internal', + 'external', 'external_gte', 'force' + """ + for param in (index, doc_type, id): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('GET', _make_path(index, + doc_type, id, '_source'), params=params) + + @query_params('_source', '_source_exclude', '_source_include', 'preference', + 'realtime', 'refresh', 'stored_fields') + def mget(self, body, index=None, doc_type=None, params=None): + """ + Get multiple documents based on an index, type (optional) and ids. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-multi-get.html>`_ + + :arg body: Document identifiers; can be either `docs` (containing full + document information) or `ids` (when index and type is provided in + the URL. + :arg index: The name of the index + :arg doc_type: The type of the document + :arg _source: True or false to return the _source field or not, or a + list of fields to return + :arg _source_exclude: A list of fields to exclude from the returned + _source field + :arg _source_include: A list of fields to extract and return from the + _source field + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg realtime: Specify whether to perform the operation in realtime or + search mode + :arg refresh: Refresh the shard containing the document before + performing the operation + :arg stored_fields: A comma-separated list of stored fields to return in + the response + """ + if body in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument 'body'.") + return self.transport.perform_request('GET', _make_path(index, + doc_type, '_mget'), params=params, body=body) + + @query_params('_source', '_source_exclude', '_source_include', 'fields', + 'lang', 'parent', 'refresh', 'retry_on_conflict', 'routing', 'timeout', + 'timestamp', 'ttl', 'version', 'version_type', 'wait_for_active_shards') + def update(self, index, doc_type, id, body=None, params=None): + """ + Update a document based on a script or partial data provided. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html>`_ + + :arg index: The name of the index + :arg doc_type: The type of the document + :arg id: Document ID + :arg body: The request definition using either `script` or partial `doc` + :arg _source: True or false to return the _source field or not, or a + list of fields to return + :arg _source_exclude: A list of fields to exclude from the returned + _source field + :arg _source_include: A list of fields to extract and return from the + _source field + :arg fields: A comma-separated list of fields to return in the response + :arg lang: The script language (default: groovy) + :arg parent: ID of the parent document. Is is only used for routing and + when for the upsert request + :arg refresh: If `true` then refresh the effected shards to make this + operation visible to search, if `wait_for` then wait for a refresh + to make this operation visible to search, if `false` (the default) + then do nothing with refreshes., valid choices are: 'true', 'false', + 'wait_for' + :arg retry_on_conflict: Specify how many times should the operation be + retried when a conflict occurs (default: 0) + :arg routing: Specific routing value + :arg timeout: Explicit operation timeout + :arg timestamp: Explicit timestamp for the document + :arg ttl: Expiration time for the document + :arg version: Explicit version number for concurrency control + :arg version_type: Specific version type, valid choices are: 'internal', + 'force' + :arg wait_for_active_shards: Sets the number of shard copies that must + be active before proceeding with the update operation. Defaults to + 1, meaning the primary shard only. Set to `all` for all shard + copies, otherwise set to any non-negative value less than or equal + to the total number of copies for the shard (number of replicas + 1) + """ + for param in (index, doc_type, id): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('POST', _make_path(index, + doc_type, id, '_update'), params=params, body=body) + + @query_params('_source', '_source_exclude', '_source_include', + 'allow_no_indices', 'analyze_wildcard', 'analyzer', 'default_operator', + 'df', 'docvalue_fields', 'expand_wildcards', 'explain', + 'fielddata_fields', 'from_', 'ignore_unavailable', 'lenient', + 'lowercase_expanded_terms', 'preference', 'q', 'request_cache', + 'routing', 'scroll', 'search_type', 'size', 'sort', 'stats', + 'stored_fields', 'suggest_field', 'suggest_mode', 'suggest_size', + 'suggest_text', 'terminate_after', 'timeout', 'track_scores', 'version') + def search(self, index=None, doc_type=None, body=None, params=None): + """ + Execute a search query and get back search hits that match the query. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html>`_ + + :arg index: A comma-separated list of index names to search; use `_all` + or empty string to perform the operation on all indices + :arg doc_type: A comma-separated list of document types to search; leave + empty to perform the operation on all types + :arg body: The search definition using the Query DSL + :arg _source: True or false to return the _source field or not, or a + list of fields to return + :arg _source_exclude: A list of fields to exclude from the returned + _source field + :arg _source_include: A list of fields to extract and return from the + _source field + :arg allow_no_indices: Whether to ignore if a wildcard indices + expression resolves into no concrete indices. (This includes `_all` + string or when no indices have been specified) + :arg analyze_wildcard: Specify whether wildcard and prefix queries + should be analyzed (default: false) + :arg analyzer: The analyzer to use for the query string + :arg default_operator: The default operator for query string query (AND + or OR), default 'OR', valid choices are: 'AND', 'OR' + :arg df: The field to use as default where no field prefix is given in + the query string + :arg docvalue_fields: A comma-separated list of fields to return as the + docvalue representation of a field for each hit + :arg expand_wildcards: Whether to expand wildcard expression to concrete + indices that are open, closed or both., default 'open', valid + choices are: 'open', 'closed', 'none', 'all' + :arg explain: Specify whether to return detailed information about score + computation as part of a hit + :arg fielddata_fields: A comma-separated list of fields to return as the + docvalue representation of a field for each hit + :arg from\_: Starting offset (default: 0) + :arg ignore_unavailable: Whether specified concrete indices should be + ignored when unavailable (missing or closed) + :arg lenient: Specify whether format-based query failures (such as + providing text to a numeric field) should be ignored + :arg lowercase_expanded_terms: Specify whether query terms should be + lowercased + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg q: Query in the Lucene query string syntax + :arg request_cache: Specify if request cache should be used for this + request or not, defaults to index level setting + :arg routing: A comma-separated list of specific routing values + :arg scroll: Specify how long a consistent view of the index should be + maintained for scrolled search + :arg search_type: Search operation type, valid choices are: + 'query_then_fetch', 'dfs_query_then_fetch' + :arg size: Number of hits to return (default: 10) + :arg sort: A comma-separated list of <field>:<direction> pairs + :arg stats: Specific 'tag' of the request for logging and statistical + purposes + :arg stored_fields: A comma-separated list of stored fields to return as + part of a hit + :arg suggest_field: Specify which field to use for suggestions + :arg suggest_mode: Specify suggest mode, default 'missing', valid + choices are: 'missing', 'popular', 'always' + :arg suggest_size: How many suggestions to return in response + :arg suggest_text: The source text for which the suggestions should be + returned + :arg terminate_after: The maximum number of documents to collect for + each shard, upon reaching which the query execution will terminate + early. + :arg timeout: Explicit operation timeout + :arg track_scores: Whether to calculate and return scores even if they + are not used for sorting + :arg version: Specify whether to return document version as part of a + hit + """ + # from is a reserved word so it cannot be used, use from_ instead + if 'from_' in params: + params['from'] = params.pop('from_') + + if doc_type and not index: + index = '_all' + return self.transport.perform_request('GET', _make_path(index, + doc_type, '_search'), params=params, body=body) + + @query_params('_source', '_source_exclude', '_source_include', + 'allow_no_indices', 'analyze_wildcard', 'analyzer', 'conflicts', + 'default_operator', 'df', 'docvalue_fields', 'expand_wildcards', + 'explain', 'fielddata_fields', 'from_', 'ignore_unavailable', 'lenient', + 'lowercase_expanded_terms', 'pipeline', 'preference', 'q', 'refresh', + 'request_cache', 'requests_per_second', 'routing', 'scroll', + 'scroll_size', 'search_timeout', 'search_type', 'size', 'sort', 'stats', + 'stored_fields', 'suggest_field', 'suggest_mode', 'suggest_size', + 'suggest_text', 'terminate_after', 'timeout', 'track_scores', 'version', + 'version_type', 'wait_for_active_shards', 'wait_for_completion') + def update_by_query(self, index, doc_type=None, body=None, params=None): + """ + Perform an update on all documents matching a query. + `<https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html>`_ + + :arg index: A comma-separated list of index names to search; use `_all` + or empty string to perform the operation on all indices + :arg doc_type: A comma-separated list of document types to search; leave + empty to perform the operation on all types + :arg body: The search definition using the Query DSL + :arg _source: True or false to return the _source field or not, or a + list of fields to return + :arg _source_exclude: A list of fields to exclude from the returned + _source field + :arg _source_include: A list of fields to extract and return from the + _source field + :arg allow_no_indices: Whether to ignore if a wildcard indices + expression resolves into no concrete indices. (This includes `_all` + string or when no indices have been specified) + :arg analyze_wildcard: Specify whether wildcard and prefix queries + should be analyzed (default: false) + :arg analyzer: The analyzer to use for the query string + :arg conflicts: What to do when the reindex hits version conflicts?, + default 'abort', valid choices are: 'abort', 'proceed' + :arg default_operator: The default operator for query string query (AND + or OR), default 'OR', valid choices are: 'AND', 'OR' + :arg df: The field to use as default where no field prefix is given in + the query string + :arg docvalue_fields: A comma-separated list of fields to return as the + docvalue representation of a field for each hit + :arg expand_wildcards: Whether to expand wildcard expression to concrete + indices that are open, closed or both., default 'open', valid + choices are: 'open', 'closed', 'none', 'all' + :arg explain: Specify whether to return detailed information about score + computation as part of a hit + :arg fielddata_fields: A comma-separated list of fields to return as the + docvalue representation of a field for each hit + :arg from\_: Starting offset (default: 0) + :arg ignore_unavailable: Whether specified concrete indices should be + ignored when unavailable (missing or closed) + :arg lenient: Specify whether format-based query failures (such as + providing text to a numeric field) should be ignored + :arg lowercase_expanded_terms: Specify whether query terms should be + lowercased + :arg pipeline: Ingest pipeline to set on index requests made by this + action. (default: none) + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg q: Query in the Lucene query string syntax + :arg refresh: Should the effected indexes be refreshed? + :arg request_cache: Specify if request cache should be used for this + request or not, defaults to index level setting + :arg requests_per_second: The throttle to set on this request in sub- + requests per second. -1 means set no throttle as does "unlimited" + which is the only non-float this accepts., default 0 + :arg routing: A comma-separated list of specific routing values + :arg scroll: Specify how long a consistent view of the index should be + maintained for scrolled search + :arg scroll_size: Size on the scroll request powering the + update_by_query + :arg search_timeout: Explicit timeout for each search request. Defaults + to no timeout. + :arg search_type: Search operation type, valid choices are: + 'query_then_fetch', 'dfs_query_then_fetch' + :arg size: Number of hits to return (default: 10) + :arg sort: A comma-separated list of <field>:<direction> pairs + :arg stats: Specific 'tag' of the request for logging and statistical + purposes + :arg stored_fields: A comma-separated list of stored fields to return as + part of a hit + :arg suggest_field: Specify which field to use for suggestions + :arg suggest_mode: Specify suggest mode, default 'missing', valid + choices are: 'missing', 'popular', 'always' + :arg suggest_size: How many suggestions to return in response + :arg suggest_text: The source text for which the suggestions should be + returned + :arg terminate_after: The maximum number of documents to collect for + each shard, upon reaching which the query execution will terminate + early. + :arg timeout: Time each individual bulk request should wait for shards + that are unavailable., default '1m' + :arg track_scores: Whether to calculate and return scores even if they + are not used for sorting + :arg version: Specify whether to return document version as part of a + hit + :arg version_type: Should the document increment the version number + (internal) on hit or not (reindex) + :arg wait_for_active_shards: Sets the number of shard copies that must + be active before proceeding with the update by query operation. + Defaults to 1, meaning the primary shard only. Set to `all` for all + shard copies, otherwise set to any non-negative value less than or + equal to the total number of copies for the shard (number of + replicas + 1) + :arg wait_for_completion: Should the request should block until the + reindex is complete., default False + """ + if index in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument 'index'.") + return self.transport.perform_request('POST', _make_path(index, + doc_type, '_update_by_query'), params=params, body=body) + + @query_params('refresh', 'requests_per_second', 'timeout', + 'wait_for_active_shards', 'wait_for_completion') + def reindex(self, body, params=None): + """ + Reindex all documents from one index to another. + `<https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html>`_ + + :arg body: The search definition using the Query DSL and the prototype + for the index request. + :arg refresh: Should the effected indexes be refreshed? + :arg requests_per_second: The throttle to set on this request in sub- + requests per second. -1 means set no throttle as does "unlimited" + which is the only non-float this accepts., default 0 + :arg timeout: Time each individual bulk request should wait for shards + that are unavailable., default '1m' + :arg wait_for_active_shards: Sets the number of shard copies that must + be active before proceeding with the reindex operation. Defaults to + 1, meaning the primary shard only. Set to `all` for all shard + copies, otherwise set to any non-negative value less than or equal + to the total number of copies for the shard (number of replicas + 1) + :arg wait_for_completion: Should the request should block until the + reindex is complete., default False + """ + if body in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument 'body'.") + return self.transport.perform_request('POST', '/_reindex', + params=params, body=body) + + @query_params('requests_per_second') + def reindex_rethrottle(self, task_id=None, params=None): + """ + Change the value of ``requests_per_second`` of a running ``reindex`` task. + `<https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html>`_ + + :arg task_id: The task id to rethrottle + :arg requests_per_second: The throttle to set on this request in + floating sub-requests per second. -1 means set no throttle. + """ + return self.transport.perform_request('POST', _make_path('_reindex', + task_id, '_rethrottle'), params=params) + + @query_params('_source', '_source_exclude', '_source_include', + 'allow_no_indices', 'analyze_wildcard', 'analyzer', 'conflicts', + 'default_operator', 'df', 'docvalue_fields', 'expand_wildcards', + 'explain', 'from_', 'ignore_unavailable', 'lenient', + 'lowercase_expanded_terms', 'preference', 'q', 'refresh', + 'request_cache', 'requests_per_second', 'routing', 'scroll', + 'scroll_size', 'search_timeout', 'search_type', 'size', 'sort', 'stats', + 'stored_fields', 'suggest_field', 'suggest_mode', 'suggest_size', + 'suggest_text', 'terminate_after', 'timeout', 'track_scores', 'version', + 'wait_for_active_shards', 'wait_for_completion') + def delete_by_query(self, index, body, doc_type=None, params=None): + """ + Delete all documents matching a query. + `<https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html>`_ + + :arg index: A comma-separated list of index names to search; use `_all` + or empty string to perform the operation on all indices + :arg body: The search definition using the Query DSL + :arg doc_type: A comma-separated list of document types to search; leave + empty to perform the operation on all types + :arg _source: True or false to return the _source field or not, or a + list of fields to return + :arg _source_exclude: A list of fields to exclude from the returned + _source field + :arg _source_include: A list of fields to extract and return from the + _source field + :arg allow_no_indices: Whether to ignore if a wildcard indices + expression resolves into no concrete indices. (This includes `_all` + string or when no indices have been specified) + :arg analyze_wildcard: Specify whether wildcard and prefix queries + should be analyzed (default: false) + :arg analyzer: The analyzer to use for the query string + :arg conflicts: What to do when the delete-by-query hits version + conflicts?, default 'abort', valid choices are: 'abort', 'proceed' + :arg default_operator: The default operator for query string query (AND + or OR), default 'OR', valid choices are: 'AND', 'OR' + :arg df: The field to use as default where no field prefix is given in + the query string + :arg docvalue_fields: A comma-separated list of fields to return as the + docvalue representation of a field for each hit + :arg expand_wildcards: Whether to expand wildcard expression to concrete + indices that are open, closed or both., default 'open', valid + choices are: 'open', 'closed', 'none', 'all' + :arg explain: Specify whether to return detailed information about score + computation as part of a hit + :arg from\_: Starting offset (default: 0) + :arg ignore_unavailable: Whether specified concrete indices should be + ignored when unavailable (missing or closed) + :arg lenient: Specify whether format-based query failures (such as + providing text to a numeric field) should be ignored + :arg lowercase_expanded_terms: Specify whether query terms should be + lowercased + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg q: Query in the Lucene query string syntax + :arg refresh: Should the effected indexes be refreshed? + :arg request_cache: Specify if request cache should be used for this + request or not, defaults to index level setting + :arg requests_per_second: The throttle for this request in sub-requests + per second. -1 means set no throttle., default 0 + :arg routing: A comma-separated list of specific routing values + :arg scroll: Specify how long a consistent view of the index should be + maintained for scrolled search + :arg scroll_size: Size on the scroll request powering the + update_by_query + :arg search_timeout: Explicit timeout for each search request. Defaults + to no timeout. + :arg search_type: Search operation type, valid choices are: + 'query_then_fetch', 'dfs_query_then_fetch' + :arg size: Number of hits to return (default: 10) + :arg sort: A comma-separated list of <field>:<direction> pairs + :arg stats: Specific 'tag' of the request for logging and statistical + purposes + :arg stored_fields: A comma-separated list of stored fields to return as + part of a hit + :arg suggest_field: Specify which field to use for suggestions + :arg suggest_mode: Specify suggest mode, default 'missing', valid + choices are: 'missing', 'popular', 'always' + :arg suggest_size: How many suggestions to return in response + :arg suggest_text: The source text for which the suggestions should be + returned + :arg terminate_after: The maximum number of documents to collect for + each shard, upon reaching which the query execution will terminate + early. + :arg timeout: Time each individual bulk request should wait for shards + that are unavailable., default '1m' + :arg track_scores: Whether to calculate and return scores even if they + are not used for sorting + :arg version: Specify whether to return document version as part of a + hit + :arg wait_for_active_shards: Sets the number of shard copies that must + be active before proceeding with the delete by query operation. + Defaults to 1, meaning the primary shard only. Set to `all` for all + shard copies, otherwise set to any non-negative value less than or + equal to the total number of copies for the shard (number of + replicas + 1) + :arg wait_for_completion: Should the request should block until the + delete-by-query is complete., default False + """ + for param in (index, body): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('POST', _make_path(index, + doc_type, '_delete_by_query'), params=params, body=body) + + @query_params('allow_no_indices', 'expand_wildcards', 'ignore_unavailable', + 'local', 'preference', 'routing') + def search_shards(self, index=None, doc_type=None, params=None): + """ + The search shards api returns the indices and shards that a search + request would be executed against. This can give useful feedback for working + out issues or planning optimizations with routing and shard preferences. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-shards.html>`_ + + :arg index: A comma-separated list of index names to search; use `_all` + or empty string to perform the operation on all indices + :arg doc_type: A comma-separated list of document types to search; leave + empty to perform the operation on all types + :arg allow_no_indices: Whether to ignore if a wildcard indices + expression resolves into no concrete indices. (This includes `_all` + string or when no indices have been specified) + :arg expand_wildcards: Whether to expand wildcard expression to concrete + indices that are open, closed or both., default 'open', valid + choices are: 'open', 'closed', 'none', 'all' + :arg ignore_unavailable: Whether specified concrete indices should be + ignored when unavailable (missing or closed) + :arg local: Return local information, do not retrieve the state from + master node (default: false) + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg routing: Specific routing value + """ + return self.transport.perform_request('GET', _make_path(index, + doc_type, '_search_shards'), params=params) + + @query_params('allow_no_indices', 'expand_wildcards', 'ignore_unavailable', + 'preference', 'routing', 'scroll', 'search_type') + def search_template(self, index=None, doc_type=None, body=None, params=None): + """ + A query that accepts a query template and a map of key/value pairs to + fill in template parameters. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html>`_ + + :arg index: A comma-separated list of index names to search; use `_all` + or empty string to perform the operation on all indices + :arg doc_type: A comma-separated list of document types to search; leave + empty to perform the operation on all types + :arg body: The search definition template and its params + :arg allow_no_indices: Whether to ignore if a wildcard indices + expression resolves into no concrete indices. (This includes `_all` + string or when no indices have been specified) + :arg expand_wildcards: Whether to expand wildcard expression to concrete + indices that are open, closed or both., default 'open', valid + choices are: 'open', 'closed', 'none', 'all' + :arg ignore_unavailable: Whether specified concrete indices should be + ignored when unavailable (missing or closed) + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg routing: A comma-separated list of specific routing values + :arg scroll: Specify how long a consistent view of the index should be + maintained for scrolled search + :arg search_type: Search operation type, valid choices are: + 'query_then_fetch', 'query_and_fetch', 'dfs_query_then_fetch', + 'dfs_query_and_fetch' + """ + return self.transport.perform_request('GET', _make_path(index, + doc_type, '_search', 'template'), params=params, body=body) + + @query_params('_source', '_source_exclude', '_source_include', + 'analyze_wildcard', 'analyzer', 'default_operator', 'df', 'lenient', + 'lowercase_expanded_terms', 'parent', 'preference', 'q', 'routing', + 'stored_fields') + def explain(self, index, doc_type, id, body=None, params=None): + """ + The explain api computes a score explanation for a query and a specific + document. This can give useful feedback whether a document matches or + didn't match a specific query. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html>`_ + + :arg index: The name of the index + :arg doc_type: The type of the document + :arg id: The document ID + :arg body: The query definition using the Query DSL + :arg _source: True or false to return the _source field or not, or a + list of fields to return + :arg _source_exclude: A list of fields to exclude from the returned + _source field + :arg _source_include: A list of fields to extract and return from the + _source field + :arg analyze_wildcard: Specify whether wildcards and prefix queries in + the query string query should be analyzed (default: false) + :arg analyzer: The analyzer for the query string query + :arg default_operator: The default operator for query string query (AND + or OR), default 'OR', valid choices are: 'AND', 'OR' + :arg df: The default field for query string query (default: _all) + :arg lenient: Specify whether format-based query failures (such as + providing text to a numeric field) should be ignored + :arg lowercase_expanded_terms: Specify whether query terms should be + lowercased + :arg parent: The ID of the parent document + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg q: Query in the Lucene query string syntax + :arg routing: Specific routing value + :arg stored_fields: A comma-separated list of stored fields to return in + the response + """ + for param in (index, doc_type, id): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('GET', _make_path(index, + doc_type, id, '_explain'), params=params, body=body) + + @query_params('scroll') + def scroll(self, scroll_id=None, body=None, params=None): + """ + Scroll a search request created by specifying the scroll parameter. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html>`_ + + :arg scroll_id: The scroll ID + :arg body: The scroll ID if not passed by URL or query parameter. + :arg scroll: Specify how long a consistent view of the index should be + maintained for scrolled search + """ + if scroll_id in SKIP_IN_PATH and body in SKIP_IN_PATH: + raise ValueError("You need to supply scroll_id or body.") + elif scroll_id and not body: + body = scroll_id + elif scroll_id: + params['scroll_id'] = scroll_id + + return self.transport.perform_request('GET', '/_search/scroll', + params=params, body=body) + + @query_params() + def clear_scroll(self, scroll_id=None, body=None, params=None): + """ + Clear the scroll request created by specifying the scroll parameter to + search. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html>`_ + + :arg scroll_id: A comma-separated list of scroll IDs to clear + :arg body: A comma-separated list of scroll IDs to clear if none was + specified via the scroll_id parameter + """ + if scroll_id in SKIP_IN_PATH and body in SKIP_IN_PATH: + raise ValueError("You need to supply scroll_id or body.") + elif scroll_id and not body: + body = scroll_id + elif scroll_id: + params['scroll_id'] = scroll_id + + return self.transport.perform_request('DELETE', '/_search/scroll', + params=params, body=body) + + @query_params('parent', 'refresh', 'routing', 'timeout', 'version', + 'version_type', 'wait_for_active_shards') + def delete(self, index, doc_type, id, params=None): + """ + Delete a typed JSON document from a specific index based on its id. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html>`_ + + :arg index: The name of the index + :arg doc_type: The type of the document + :arg id: The document ID + :arg parent: ID of parent document + :arg refresh: If `true` then refresh the effected shards to make this + operation visible to search, if `wait_for` then wait for a refresh + to make this operation visible to search, if `false` (the default) + then do nothing with refreshes., valid choices are: 'true', 'false', + 'wait_for' + :arg routing: Specific routing value + :arg timeout: Explicit operation timeout + :arg version: Explicit version number for concurrency control + :arg version_type: Specific version type, valid choices are: 'internal', + 'external', 'external_gte', 'force' + :arg wait_for_active_shards: Sets the number of shard copies that must + be active before proceeding with the delete operation. Defaults to + 1, meaning the primary shard only. Set to `all` for all shard + copies, otherwise set to any non-negative value less than or equal + to the total number of copies for the shard (number of replicas + 1) + """ + for param in (index, doc_type, id): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('DELETE', _make_path(index, + doc_type, id), params=params) + + @query_params('allow_no_indices', 'analyze_wildcard', 'analyzer', + 'default_operator', 'df', 'expand_wildcards', 'ignore_unavailable', + 'lenient', 'lowercase_expanded_terms', 'min_score', 'preference', 'q', + 'routing') + def count(self, index=None, doc_type=None, body=None, params=None): + """ + Execute a query and get the number of matches for that query. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-count.html>`_ + + :arg index: A comma-separated list of indices to restrict the results + :arg doc_type: A comma-separated list of types to restrict the results + :arg body: A query to restrict the results specified with the Query DSL + (optional) + :arg allow_no_indices: Whether to ignore if a wildcard indices + expression resolves into no concrete indices. (This includes `_all` + string or when no indices have been specified) + :arg analyze_wildcard: Specify whether wildcard and prefix queries + should be analyzed (default: false) + :arg analyzer: The analyzer to use for the query string + :arg default_operator: The default operator for query string query (AND + or OR), default 'OR', valid choices are: 'AND', 'OR' + :arg df: The field to use as default where no field prefix is given in + the query string + :arg expand_wildcards: Whether to expand wildcard expression to concrete + indices that are open, closed or both., default 'open', valid + choices are: 'open', 'closed', 'none', 'all' + :arg ignore_unavailable: Whether specified concrete indices should be + ignored when unavailable (missing or closed) + :arg lenient: Specify whether format-based query failures (such as + providing text to a numeric field) should be ignored + :arg lowercase_expanded_terms: Specify whether query terms should be + lowercased + :arg min_score: Include only documents with a specific `_score` value in + the result + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg q: Query in the Lucene query string syntax + :arg routing: Specific routing value + """ + if doc_type and not index: + index = '_all' + + return self.transport.perform_request('GET', _make_path(index, + doc_type, '_count'), params=params, body=body) + + @query_params('_source', '_source_exclude', '_source_include', 'fields', + 'pipeline', 'refresh', 'routing', 'timeout', 'wait_for_active_shards') + def bulk(self, body, index=None, doc_type=None, params=None): + """ + Perform many index/delete operations in a single API call. + + See the :func:`~elasticsearch.helpers.bulk` helper function for a more + friendly API. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html>`_ + + :arg body: The operation definition and data (action-data pairs), + separated by newlines + :arg index: Default index for items which don't provide one + :arg doc_type: Default document type for items which don't provide one + :arg _source: True or false to return the _source field or not, or + default list of fields to return, can be overridden on each sub- + request + :arg _source_exclude: Default list of fields to exclude from the + returned _source field, can be overridden on each sub-request + :arg _source_include: Default list of fields to extract and return from + the _source field, can be overridden on each sub-request + :arg fields: Default comma-separated list of fields to return in the + response for updates, can be overridden on each sub-request + :arg pipeline: The pipeline id to preprocess incoming documents with + :arg refresh: If `true` then refresh the effected shards to make this + operation visible to search, if `wait_for` then wait for a refresh + to make this operation visible to search, if `false` (the default) + then do nothing with refreshes., valid choices are: 'true', 'false', + 'wait_for' + :arg routing: Specific routing value + :arg timeout: Explicit operation timeout + :arg wait_for_active_shards: Sets the number of shard copies that must + be active before proceeding with the bulk operation. Defaults to 1, + meaning the primary shard only. Set to `all` for all shard copies, + otherwise set to any non-negative value less than or equal to the + total number of copies for the shard (number of replicas + 1) + """ + if body in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument 'body'.") + return self.transport.perform_request('POST', _make_path(index, + doc_type, '_bulk'), params=params, body=self._bulk_body(body)) + + @query_params('max_concurrent_searches', 'search_type') + def msearch(self, body, index=None, doc_type=None, params=None): + """ + Execute several search requests within the same API. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html>`_ + + :arg body: The request definitions (metadata-search request definition + pairs), separated by newlines + :arg index: A comma-separated list of index names to use as default + :arg doc_type: A comma-separated list of document types to use as + default + :arg max_concurrent_searches: Controls the maximum number of concurrent + searches the multi search api will execute + :arg search_type: Search operation type, valid choices are: + 'query_then_fetch', 'query_and_fetch', 'dfs_query_then_fetch', + 'dfs_query_and_fetch' + """ + if body in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument 'body'.") + return self.transport.perform_request('GET', _make_path(index, + doc_type, '_msearch'), params=params, body=self._bulk_body(body)) + + @query_params('allow_no_indices', 'expand_wildcards', 'ignore_unavailable', + 'preference', 'routing') + def suggest(self, body, index=None, params=None): + """ + The suggest feature suggests similar looking terms based on a provided + text by using a suggester. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html>`_ + + :arg body: The request definition + :arg index: A comma-separated list of index names to restrict the + operation; use `_all` or empty string to perform the operation on + all indices + :arg allow_no_indices: Whether to ignore if a wildcard indices + expression resolves into no concrete indices. (This includes `_all` + string or when no indices have been specified) + :arg expand_wildcards: Whether to expand wildcard expression to concrete + indices that are open, closed or both., default 'open', valid + choices are: 'open', 'closed', 'none', 'all' + :arg ignore_unavailable: Whether specified concrete indices should be + ignored when unavailable (missing or closed) + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg routing: Specific routing value + """ + if body in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument 'body'.") + return self.transport.perform_request('POST', _make_path(index, + '_suggest'), params=params, body=body) + + @query_params('allow_no_indices', 'expand_wildcards', 'ignore_unavailable', + 'percolate_format', 'percolate_index', 'percolate_preference', + 'percolate_routing', 'percolate_type', 'preference', 'routing', + 'version', 'version_type') + def percolate(self, index, doc_type, id=None, body=None, params=None): + """ + The percolator allows to register queries against an index, and then + send percolate requests which include a doc, and getting back the + queries that match on that doc out of the set of registered queries. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-percolate.html>`_ + + :arg index: The index of the document being percolated. + :arg doc_type: The type of the document being percolated. + :arg id: Substitute the document in the request body with a document + that is known by the specified id. On top of the id, the index and + type parameter will be used to retrieve the document from within the + cluster. + :arg body: The percolator request definition using the percolate DSL + :arg allow_no_indices: Whether to ignore if a wildcard indices + expression resolves into no concrete indices. (This includes `_all` + string or when no indices have been specified) + :arg expand_wildcards: Whether to expand wildcard expression to concrete + indices that are open, closed or both., default 'open', valid + choices are: 'open', 'closed', 'none', 'all' + :arg ignore_unavailable: Whether specified concrete indices should be + ignored when unavailable (missing or closed) + :arg percolate_format: Return an array of matching query IDs instead of + objects, valid choices are: 'ids' + :arg percolate_index: The index to percolate the document into. Defaults + to index. + :arg percolate_preference: Which shard to prefer when executing the + percolate request. + :arg percolate_routing: The routing value to use when percolating the + existing document. + :arg percolate_type: The type to percolate document into. Defaults to + type. + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg routing: A comma-separated list of specific routing values + :arg version: Explicit version number for concurrency control + :arg version_type: Specific version type, valid choices are: 'internal', + 'external', 'external_gte', 'force' + """ + for param in (index, doc_type): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('GET', _make_path(index, + doc_type, id, '_percolate'), params=params, body=body) + + @query_params('allow_no_indices', 'expand_wildcards', 'ignore_unavailable') + def mpercolate(self, body, index=None, doc_type=None, params=None): + """ + The percolator allows to register queries against an index, and then + send percolate requests which include a doc, and getting back the + queries that match on that doc out of the set of registered queries. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-percolate.html>`_ + + :arg body: The percolate request definitions (header & body pair), + separated by newlines + :arg index: The index of the document being count percolated to use as + default + :arg doc_type: The type of the document being percolated to use as + default. + :arg allow_no_indices: Whether to ignore if a wildcard indices + expression resolves into no concrete indices. (This includes `_all` + string or when no indices have been specified) + :arg expand_wildcards: Whether to expand wildcard expression to concrete + indices that are open, closed or both., default 'open', valid + choices are: 'open', 'closed', 'none', 'all' + :arg ignore_unavailable: Whether specified concrete indices should be + ignored when unavailable (missing or closed) + """ + if body in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument 'body'.") + return self.transport.perform_request('GET', _make_path(index, + doc_type, '_mpercolate'), params=params, body=self._bulk_body(body)) + + @query_params('allow_no_indices', 'expand_wildcards', 'ignore_unavailable', + 'percolate_index', 'percolate_type', 'preference', 'routing', 'version', + 'version_type') + def count_percolate(self, index, doc_type, id=None, body=None, params=None): + """ + The percolator allows to register queries against an index, and then + send percolate requests which include a doc, and getting back the + queries that match on that doc out of the set of registered queries. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-percolate.html>`_ + + :arg index: The index of the document being count percolated. + :arg doc_type: The type of the document being count percolated. + :arg id: Substitute the document in the request body with a document + that is known by the specified id. On top of the id, the index and + type parameter will be used to retrieve the document from within the + cluster. + :arg body: The count percolator request definition using the percolate + DSL + :arg allow_no_indices: Whether to ignore if a wildcard indices + expression resolves into no concrete indices. (This includes `_all` + string or when no indices have been specified) + :arg expand_wildcards: Whether to expand wildcard expression to concrete + indices that are open, closed or both., default 'open', valid + choices are: 'open', 'closed', 'none', 'all' + :arg ignore_unavailable: Whether specified concrete indices should be + ignored when unavailable (missing or closed) + :arg percolate_index: The index to count percolate the document into. + Defaults to index. + :arg percolate_type: The type to count percolate document into. Defaults + to type. + :arg preference: Specify the node or shard the operation should be + performed on (default: random) + :arg routing: A comma-separated list of specific routing values + :arg version: Explicit version number for concurrency control + :arg version_type: Specific version type, valid choices are: 'internal', + 'external', 'external_gte', 'force' + """ + for param in (index, doc_type): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('GET', _make_path(index, + doc_type, id, '_percolate', 'count'), params=params, body=body) + + @query_params('field_statistics', 'fields', 'offsets', 'parent', 'payloads', + 'positions', 'preference', 'realtime', 'routing', 'term_statistics', + 'version', 'version_type') + def termvectors(self, index, doc_type, id=None, body=None, params=None): + """ + Returns information and statistics on terms in the fields of a + particular document. The document could be stored in the index or + artificially provided by the user (Added in 1.4). Note that for + documents stored in the index, this is a near realtime API as the term + vectors are not available until the next refresh. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html>`_ + + :arg index: The index in which the document resides. + :arg doc_type: The type of the document. + :arg id: The id of the document, when not specified a doc param should + be supplied. + :arg body: Define parameters and or supply a document to get termvectors + for. See documentation. + :arg field_statistics: Specifies if document count, sum of document + frequencies and sum of total term frequencies should be returned., + default True + :arg fields: A comma-separated list of fields to return. + :arg offsets: Specifies if term offsets should be returned., default + True + :arg parent: Parent id of documents. + :arg payloads: Specifies if term payloads should be returned., default + True + :arg positions: Specifies if term positions should be returned., default + True + :arg preference: Specify the node or shard the operation should be + performed on (default: random). + :arg realtime: Specifies if request is real-time as opposed to near- + real-time (default: true). + :arg routing: Specific routing value. + :arg term_statistics: Specifies if total term frequency and document + frequency should be returned., default False + :arg version: Explicit version number for concurrency control + :arg version_type: Specific version type, valid choices are: 'internal', + 'external', 'external_gte', 'force' + """ + for param in (index, doc_type): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('GET', _make_path(index, + doc_type, id, '_termvectors'), params=params, body=body) + + @query_params('field_statistics', 'fields', 'ids', 'offsets', 'parent', + 'payloads', 'positions', 'preference', 'realtime', 'routing', + 'term_statistics', 'version', 'version_type') + def mtermvectors(self, index=None, doc_type=None, body=None, params=None): + """ + Multi termvectors API allows to get multiple termvectors based on an + index, type and id. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-multi-termvectors.html>`_ + + :arg index: The index in which the document resides. + :arg doc_type: The type of the document. + :arg body: Define ids, documents, parameters or a list of parameters per + document here. You must at least provide a list of document ids. See + documentation. + :arg field_statistics: Specifies if document count, sum of document + frequencies and sum of total term frequencies should be returned. + Applies to all returned documents unless otherwise specified in body + "params" or "docs"., default True + :arg fields: A comma-separated list of fields to return. Applies to all + returned documents unless otherwise specified in body "params" or + "docs". + :arg ids: A comma-separated list of documents ids. You must define ids + as parameter or set "ids" or "docs" in the request body + :arg offsets: Specifies if term offsets should be returned. Applies to + all returned documents unless otherwise specified in body "params" + or "docs"., default True + :arg parent: Parent id of documents. Applies to all returned documents + unless otherwise specified in body "params" or "docs". + :arg payloads: Specifies if term payloads should be returned. Applies to + all returned documents unless otherwise specified in body "params" + or "docs"., default True + :arg positions: Specifies if term positions should be returned. Applies + to all returned documents unless otherwise specified in body + "params" or "docs"., default True + :arg preference: Specify the node or shard the operation should be + performed on (default: random) .Applies to all returned documents + unless otherwise specified in body "params" or "docs". + :arg realtime: Specifies if requests are real-time as opposed to near- + real-time (default: true). + :arg routing: Specific routing value. Applies to all returned documents + unless otherwise specified in body "params" or "docs". + :arg term_statistics: Specifies if total term frequency and document + frequency should be returned. Applies to all returned documents + unless otherwise specified in body "params" or "docs"., default + False + :arg version: Explicit version number for concurrency control + :arg version_type: Specific version type, valid choices are: 'internal', + 'external', 'external_gte', 'force' + """ + return self.transport.perform_request('GET', _make_path(index, + doc_type, '_mtermvectors'), params=params, body=body) + + @query_params() + def put_script(self, lang, id, body, params=None): + """ + Create a script in given language with specified ID. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html>`_ + + :arg lang: Script language + :arg id: Script ID + :arg body: The document + """ + for param in (lang, id, body): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('PUT', _make_path('_scripts', + lang, id), params=params, body=body) + + @query_params() + def get_script(self, lang, id, params=None): + """ + Retrieve a script from the API. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html>`_ + + :arg lang: Script language + :arg id: Script ID + """ + for param in (lang, id): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('GET', _make_path('_scripts', + lang, id), params=params) + + @query_params() + def delete_script(self, lang, id, params=None): + """ + Remove a stored script from elasticsearch. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html>`_ + + :arg lang: Script language + :arg id: Script ID + """ + for param in (lang, id): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('DELETE', + _make_path('_scripts', lang, id), params=params) + + @query_params() + def put_template(self, id, body, params=None): + """ + Create a search template. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html>`_ + + :arg id: Template ID + :arg body: The document + """ + for param in (id, body): + if param in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument.") + return self.transport.perform_request('PUT', _make_path('_search', + 'template', id), params=params, body=body) + + @query_params() + def get_template(self, id, params=None): + """ + Retrieve a search template. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html>`_ + + :arg id: Template ID + """ + if id in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument 'id'.") + return self.transport.perform_request('GET', _make_path('_search', + 'template', id), params=params) + + @query_params() + def delete_template(self, id, params=None): + """ + Delete a search template. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html>`_ + + :arg id: Template ID + """ + if id in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument 'id'.") + return self.transport.perform_request('DELETE', _make_path('_search', + 'template', id), params=params) + + @query_params('allow_no_indices', 'expand_wildcards', 'fields', + 'ignore_unavailable', 'level') + def field_stats(self, index=None, body=None, params=None): + """ + The field stats api allows one to find statistical properties of a + field without executing a search, but looking up measurements that are + natively available in the Lucene index. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-field-stats.html>`_ + + :arg index: A comma-separated list of index names; use `_all` or empty + string to perform the operation on all indices + :arg body: Field json objects containing the name and optionally a range + to filter out indices result, that have results outside the defined + bounds + :arg allow_no_indices: Whether to ignore if a wildcard indices + expression resolves into no concrete indices. (This includes `_all` + string or when no indices have been specified) + :arg expand_wildcards: Whether to expand wildcard expression to concrete + indices that are open, closed or both., default 'open', valid + choices are: 'open', 'closed', 'none', 'all' + :arg fields: A comma-separated list of fields for to get field + statistics for (min value, max value, and more) + :arg ignore_unavailable: Whether specified concrete indices should be + ignored when unavailable (missing or closed) + :arg level: Defines if field stats should be returned on a per index + level or on a cluster wide level, default 'cluster', valid choices + are: 'indices', 'cluster' + """ + return self.transport.perform_request('GET', _make_path(index, + '_field_stats'), params=params, body=body) + + @query_params() + def render_search_template(self, id=None, body=None, params=None): + """ + `<http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-template.html>`_ + + :arg id: The id of the stored search template + :arg body: The search definition template and its params + """ + return self.transport.perform_request('GET', _make_path('_render', + 'template', id), params=params, body=body) + + @query_params('search_type') + def msearch_template(self, body, index=None, doc_type=None, params=None): + """ + The /_search/template endpoint allows to use the mustache language to + pre render search requests, before they are executed and fill existing + templates with template parameters. + `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html>`_ + + :arg body: The request definitions (metadata-search request definition + pairs), separated by newlines + :arg index: A comma-separated list of index names to use as default + :arg doc_type: A comma-separated list of document types to use as + default + :arg search_type: Search operation type, valid choices are: + 'query_then_fetch', 'query_and_fetch', 'dfs_query_then_fetch', + 'dfs_query_and_fetch' + """ + if body in SKIP_IN_PATH: + raise ValueError("Empty value passed for a required argument 'body'.") + return self.transport.perform_request('GET', _make_path(index, doc_type, + '_msearch', 'template'), params=params, body=self._bulk_body(body)) + |