msearch

in opensearch-api/lib/opensearch/api/actions/msearch.rb [49:96]


      def msearch(arguments = {})
        raise ArgumentError, "Required argument 'body' missing" unless arguments[:body]

        headers = arguments.delete(:headers) || {}

        arguments = arguments.clone

        _index = arguments.delete(:index)

        _type = arguments.delete(:type)

        method = OpenSearch::API::HTTP_POST
        path   = if _index && _type
                   "#{Utils.__listify(_index)}/#{Utils.__listify(_type)}/_msearch"
                 elsif _index
                   "#{Utils.__listify(_index)}/_msearch"
                 else
                   "_msearch"
                 end
        params = Utils.__validate_and_extract_params arguments, ParamsRegistry.get(__method__)

        body = arguments[:body]
        case
        when body.is_a?(Array) && body.any? { |d| d.has_key? :search }
          payload = body
                    .inject([]) do |sum, item|
                      meta = item
                      data = meta.delete(:search)

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

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