Class: LogStash::Outputs::Solr

Inherits:
Base
  • Object
show all
Includes:
Stud::Buffer
Defined in:
lib/logstash/outputs/solr.rb

Overview

An Solr output that send data to Apache Solr.

Constant Summary collapse

MODE_STANDALONE =
'Standalone'
MODE_SOLRCLOUD =
'SolrCloud'

Instance Method Summary collapse

Instance Method Details

#closeObject



121
122
123
124
125
# File 'lib/logstash/outputs/solr.rb', line 121

def close
  unless @zk.nil? then
    @zk.close
  end
end

#flush(events, close = false) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/logstash/outputs/solr.rb', line 77

def flush(events, close=false)
  documents = []

  @fields = @defined_fields.nil? || @defined_fields.empty? ? get_fields : @defined_fields

  @unique_key = @unique_key_field.nil? ? get_unique_key : @unique_key_field

  events.each do |event|
    document = event.to_hash()

    unless document.has_key?(@unique_key) then
      document.merge!({@unique_key => SecureRandom.uuid})
    end

    unless document.has_key?(@timestamp_field) then
      document.merge!({@timestamp_field => document['@timestamp']})
    end

    if @ignore_undefined_fields then
      document.each_key do |key|
        unless @fields.include?(key) then
          document.delete(key)
        end
      end
    end

    @logger.info 'Record: %s' % document.inspect

    documents.push(document)
  end

  if @mode == MODE_STANDALONE then
    @solr.add documents, :params => {:commit => true}
    @logger.info 'Added %d document(s) to Solr' % documents.count
  elsif @mode == MODE_SOLRCLOUD then
    @solr.add documents, collection: @collection, :params => {:commit => true}
    @logger.info 'Added %d document(s) to Solr' % documents.count
  end

  rescue Exception => e
    @logger.warn('An error occurred while indexing: #{e.message}')
end

#receive(event) ⇒ Object



72
73
74
# File 'lib/logstash/outputs/solr.rb', line 72

def receive(event)
  buffer_receive(event)
end

#registerObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/logstash/outputs/solr.rb', line 45

def register
  @mode = nil
  if ! @url.nil? then
    @mode = MODE_STANDALONE
  elsif ! @zk_host.nil?
    @mode = MODE_SOLRCLOUD
  end

  @solr = nil
  @zk = nil

  if @mode == MODE_STANDALONE then
    @solr = RSolr.connect :url => @url
  elsif @mode == MODE_SOLRCLOUD then
    @zk = ZK.new(@zk_host)
    cloud_connection = RSolr::Cloud::Connection.new(@zk)
    @solr = RSolr::Client.new(cloud_connection, read_timeout: 60, open_timeout: 60)
  end

  buffer_initialize(
    :max_items => @flush_size,
    :max_interval => @idle_flush_time,
    :logger => @logger
  )
end