Class: SolrjWrapper

Inherits:
Object
  • Object
show all
Defined in:
lib/solrj_wrapper.rb,
lib/solrj_wrapper/version.rb

Overview

Methods required to interact with SolrJ objects, such as org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer

Constant Summary collapse

VERSION =
"1.0.2"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(solrj_jar_dir, solr_url, log_level = Logger::INFO, log_file = STDERR) ⇒ SolrjWrapper

Returns a new instance of SolrjWrapper.

Parameters:

  • solrj_jar_dir

    the location of Solrj jars needed to use SolrJ here

  • solr_url

    base url of the solr instance

  • log_level (defaults to: Logger::INFO)

    level of Logger messages to output; defaults to Logger::INFO

  • log_file (defaults to: STDERR)

    file to receive Logger output; defaults to STDERR



16
17
18
19
20
21
22
23
24
# File 'lib/solrj_wrapper.rb', line 16

def initialize(solrj_jar_dir, solr_url, log_level=Logger::INFO, log_file=STDERR)
  if not defined? JRUBY_VERSION
    raise "SolrjWrapper only runs under jruby"
  end
  @logger = Logger.new(log_file)
  @logger.level = log_level
  load_solrj(solrj_jar_dir)
  @http_solr_server = org.apache.solr.client.solrj.impl.HttpSolrServer.new(solr_url)
end

Instance Attribute Details

#http_solr_serverObject (readonly)

Returns the value of attribute http_solr_server.



9
10
11
# File 'lib/solrj_wrapper.rb', line 9

def http_solr_server
  @http_solr_server
end

#queryObject

Returns the value of attribute query.



10
11
12
# File 'lib/solrj_wrapper.rb', line 10

def query
  @query
end

Instance Method Details

#add_doc_to_ix(solr_input_doc, id) ⇒ Object

add the doc to Solr by calling add on the Solrj HttpSolrServer object

Parameters:

  • solr_input_doc
    • the SolrInputDocument to be added to the Solr index

  • id
    • the id of the Solr document, used for log messages



75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/solrj_wrapper.rb', line 75

def add_doc_to_ix(solr_input_doc, id)
  unless solr_input_doc.nil?
    begin
      @http_solr_server.add(solr_input_doc)
      @logger.info("updating Solr document #{id}")        
    rescue org.apache.solr.common.SolrException => e 
      @logger.error("SolrException while indexing document #{id}")
      @logger.error("#{e.message}")
      @logger.error("#{e.backtrace}")
    end
  end
end

#add_val_to_fld(solr_input_doc, fld_name, value) ⇒ Object

given a SolrInputDocument, add the field and/or the value. This will not add empty values, and it will not add duplicate values

Parameters:

  • solr_input_doc
    • the SolrInputDocument object receiving a new field value

  • fld_name
    • the name of the Solr field

  • value
    • the value to add to the Solr field



50
51
52
53
54
55
56
57
58
59
# File 'lib/solrj_wrapper.rb', line 50

def add_val_to_fld(solr_input_doc, fld_name, value)
  if !solr_input_doc.nil? && !fld_name.nil? && fld_name.size > 0 && !value.nil? && value.size > 0
    if !solr_input_doc[fld_name].nil? && solr_input_doc
      existing_vals = solr_input_doc[fld_name].getValues
    end
    if existing_vals.nil? || !existing_vals.contains(value)
      solr_input_doc.addField(fld_name, value, 1.0)
    end
  end
end

#add_vals_to_fld(solr_input_doc, fld_name, val_array) ⇒ Object

given a SolrInputDocument, add the field and/or the values. This will not add empty values, and it will not add duplicate values

Parameters:

  • solr_input_doc
    • the SolrInputDocument object receiving a new field value

  • fld_name
    • the name of the Solr field

  • val_array
    • an array of values for the Solr field



38
39
40
41
42
43
44
# File 'lib/solrj_wrapper.rb', line 38

def add_vals_to_fld(solr_input_doc, fld_name, val_array)
  unless val_array.nil? || solr_input_doc.nil? || fld_name.nil?
    val_array.each { |value|  
      add_val_to_fld(solr_input_doc, fld_name, value)
    }
  end
end

#commitObject

send a commit to the Solrj HttpSolrServer object



89
90
91
92
93
94
95
96
97
# File 'lib/solrj_wrapper.rb', line 89

def commit
  begin
    update_response = @http_solr_server.commit
  rescue org.apache.solr.common.SolrException => e
    @logger.error("SolrException while committing updates")
    @logger.error("#{e.message}")
    @logger.error("#{e.backtrace}")
  end
end

#empty_ixObject

remove all docs from the Solr index. Assumes default request handler has type dismax



100
101
102
103
# File 'lib/solrj_wrapper.rb', line 100

def empty_ix
  delete_response = @http_solr_server.deleteByQuery("*:*")
  commit
end

#get_query_result_docs(query_obj) ⇒ Object

send the query to Solr and get the SolrDocumentList from the response

Parameters:

  • org.apache.solr.client.solrj.SolrQuery

    object populated with query information to send to Solr

Returns:

  • Java::OrgApacheSolrCommon::SolrDocumentList per the query. The list size will be the number of rows in the Solr response



29
30
31
32
# File 'lib/solrj_wrapper.rb', line 29

def get_query_result_docs(query_obj)
  response = @http_solr_server.query(query_obj)
  response.getResults
end

#replace_field_values(solr_input_doc, fld_name, val_array) ⇒ Object

given a SolrInputDocument, replace all the values of the field with the new values.

If the values to be added are an empty array, the field will be removed.
If the field doesn't exist in the document, then it will be created (if the value array isn't empty)

Parameters:

  • solr_input_doc
    • the SolrInputDocument object receiving a new field value

  • fld_name
    • the name of the Solr field

  • value
    • an array of values for the Solr field



67
68
69
70
# File 'lib/solrj_wrapper.rb', line 67

def replace_field_values(solr_input_doc, fld_name, val_array)
  solr_input_doc.removeField(fld_name)
  add_vals_to_fld(solr_input_doc, fld_name, val_array)
end