Sha256: c62c2d6b58f12a433708b853501486eb77fb6a24f612774fc67748ac1bc0ddbc

Contents?: true

Size: 1.88 KB

Versions: 3

Compression:

Stored size: 1.88 KB

Contents

module Elasticsearch
  module API
    module Actions

      # Execute several search requests using templates (inline, indexed or stored in a file)
      #
      # @example Search with an inline script
      #
      #     client.msearch_template body: [
      #       { index: 'test' },
      #       { inline: { query: { match: { title: '{{q}}' } } }, params: { q: 'foo'} }
      #     ]
      #
      # @option arguments [List] :index A comma-separated list of index names to use as default
      # @option arguments [List] :type A comma-separated list of document types to use as default
      # @option arguments [Hash] :body The request definitions (metadata-search request definition pairs), separated by newlines (*Required*)
      # @option arguments [String] :search_type Search operation type (options: query_then_fetch, query_and_fetch, dfs_query_then_fetch, dfs_query_and_fetch)
      #
      # @see https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-search-template.html
      #
      def msearch_template(arguments={})
        raise ArgumentError, "Required argument 'body' missing" unless arguments[:body]

        valid_params = [ :search_type ]
        method = HTTP_GET
        path   = Utils.__pathify Utils.__listify(arguments[:index]),
                                 Utils.__listify(arguments[:type]),
                                 '_msearch/template'
        params = Utils.__validate_and_extract_params arguments, valid_params
        body   = arguments[:body]

        case
          when body.is_a?(Array)
            payload = body.map { |d| d.is_a?(String) ? d : Elasticsearch::API.serializer.dump(d) }
            payload << "" unless payload.empty?
            payload = payload.join("\n")
          else
            payload = body
        end

        perform_request(method, path, params, payload, {"Content-Type" => "application/x-ndjson"}).body
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
elasticsearch-api-6.1.0 lib/elasticsearch/api/actions/msearch_template.rb
elasticsearch-api-6.0.3 lib/elasticsearch/api/actions/msearch_template.rb
elasticsearch-api-6.0.2 lib/elasticsearch/api/actions/msearch_template.rb