Class: Sunspot::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/sunspot/session.rb

Overview

A Sunspot session encapsulates a connection to Solr and a set of configuration choices. Though users of Sunspot may manually instantiate Session objects, in the general case it’s easier to use the singleton stored in the Sunspot module. Since the Sunspot module provides all of the instance methods of Session as class methods, they are not documented again here.

Class Attribute Summary collapse

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config = Configuration.build, connection = nil) {|@config| ... } ⇒ Session

Sessions are initialized with a Sunspot configuration and a Solr connection. Usually you will want to stick with the default arguments when instantiating your own sessions.

Yields:



32
33
34
35
36
37
# File 'lib/sunspot/session.rb', line 32

def initialize(config = Configuration.build, connection = nil)
  @config = config
  yield(@config) if block_given?
  @connection = connection
  @deletes = @adds = 0
end

Class Attribute Details

.connection_classObject

For testing purposes



17
18
19
# File 'lib/sunspot/session.rb', line 17

def connection_class #:nodoc:
  @connection_class ||= RSolr
end

Instance Attribute Details

#configObject (readonly)

Sunspot::Configuration object for this session



25
26
27
# File 'lib/sunspot/session.rb', line 25

def config
  @config
end

Instance Method Details

#atomic_update(clazz, updates = {}) ⇒ Object

See Sunspot.atomic_update



105
106
107
108
# File 'lib/sunspot/session.rb', line 105

def atomic_update(clazz, updates = {})
  @adds += updates.keys.length
  indexer.add_atomic_update(clazz, updates)
end

#atomic_update!(clazz, updates = {}) ⇒ Object

See Sunspot.atomic_update!



113
114
115
116
# File 'lib/sunspot/session.rb', line 113

def atomic_update!(clazz, updates = {})
  atomic_update(clazz, updates)
  commit
end

#batchObject

See Sunspot.batch



240
241
242
243
244
# File 'lib/sunspot/session.rb', line 240

def batch
  indexer.start_batch
  yield
  indexer.flush_batch
end

#commit(soft_commit = false) ⇒ Object

See Sunspot.commit



121
122
123
124
# File 'lib/sunspot/session.rb', line 121

def commit(soft_commit = false)
  @adds = @deletes = 0
  connection.commit :commit_attributes => {:softCommit => soft_commit}
end

#commit_if_delete_dirty(soft_commit = false) ⇒ Object

See Sunspot.commit_if_delete_dirty



233
234
235
# File 'lib/sunspot/session.rb', line 233

def commit_if_delete_dirty(soft_commit = false)
  commit soft_commit if delete_dirty?
end

#commit_if_dirty(soft_commit = false) ⇒ Object

See Sunspot.commit_if_dirty



219
220
221
# File 'lib/sunspot/session.rb', line 219

def commit_if_dirty(soft_commit = false)
  commit soft_commit if dirty?
end

#delete_dirty?Boolean

See Sunspot.delete_dirty?

Returns:

  • (Boolean)


226
227
228
# File 'lib/sunspot/session.rb', line 226

def delete_dirty?
  @deletes > 0
end

#dirty?Boolean

See Sunspot.dirty?

Returns:

  • (Boolean)


212
213
214
# File 'lib/sunspot/session.rb', line 212

def dirty?
  (@deletes + @adds) > 0
end

#index(*objects) ⇒ Object

See Sunspot.index



88
89
90
91
92
# File 'lib/sunspot/session.rb', line 88

def index(*objects)
  objects.flatten!
  @adds += objects.length
  indexer.add(objects)
end

#index!(*objects) ⇒ Object

See Sunspot.index!



97
98
99
100
# File 'lib/sunspot/session.rb', line 97

def index!(*objects)
  index(*objects)
  commit
end

#more_like_this(object, *types, &block) ⇒ Object

See Sunspot.more_like_this



80
81
82
83
# File 'lib/sunspot/session.rb', line 80

def more_like_this(object, *types, &block)
  mlt = new_more_like_this(object, *types, &block)
  mlt.execute
end

#new_more_like_this(object, *types, &block) ⇒ Object

See Sunspot.new_more_like_this



65
66
67
68
69
70
71
72
73
74
75
# File 'lib/sunspot/session.rb', line 65

def new_more_like_this(object, *types, &block)
  types[0] ||= object.class
  mlt = Search::MoreLikeThisSearch.new(
    connection,
    setup_for_types(types),
    Query::MoreLikeThisQuery.new(object, types),
    @config
  )
  mlt.build(&block) if block
  mlt
end

#new_search(*types, &block) ⇒ Object

See Sunspot.new_search



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/sunspot/session.rb', line 42

def new_search(*types, &block)
  types.flatten!
  search = Search::StandardSearch.new(
    connection,
    setup_for_types(types),
    Query::StandardQuery.new(types),
    @config
  )
  search.build(&block) if block
  search
end

#optimizeObject

See Sunspot.optimize



129
130
131
132
# File 'lib/sunspot/session.rb', line 129

def optimize
  @adds = @deletes = 0
  connection.optimize
end

#remove(*objects, &block) ⇒ Object

See Sunspot.remove



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/sunspot/session.rb', line 137

def remove(*objects, &block)
  if block
    types = objects
    conjunction = Query::Connective::Conjunction.new
    if types.length == 1
      conjunction.add_positive_restriction(TypeField.instance, Query::Restriction::EqualTo, types.first)
    else
      conjunction.add_positive_restriction(TypeField.instance, Query::Restriction::AnyOf, types)
    end
    dsl = DSL::Scope.new(conjunction, setup_for_types(types))
    Util.instance_eval_or_call(dsl, &block)
    indexer.remove_by_scope(conjunction)
  else
    objects.flatten!
    @deletes += objects.length
    objects.each do |object|
      indexer.remove(object)
    end
  end
end

#remove!(*objects, &block) ⇒ Object

See Sunspot.remove!



161
162
163
164
# File 'lib/sunspot/session.rb', line 161

def remove!(*objects, &block)
  remove(*objects, &block)
  commit
end

#remove_all(*classes) ⇒ Object

See Sunspot.remove_all



190
191
192
193
194
195
196
197
198
199
# File 'lib/sunspot/session.rb', line 190

def remove_all(*classes)
  classes.flatten!
  if classes.empty?
    @deletes += 1
    indexer.remove_all
  else
    @deletes += classes.length
    classes.each { |clazz| indexer.remove_all(clazz) }
  end
end

#remove_all!(*classes) ⇒ Object

See Sunspot.remove_all!



204
205
206
207
# File 'lib/sunspot/session.rb', line 204

def remove_all!(*classes)
  remove_all(*classes)
  commit
end

#remove_by_id(clazz, *ids) ⇒ Object

See Sunspot.remove_by_id



169
170
171
172
173
174
175
176
177
# File 'lib/sunspot/session.rb', line 169

def remove_by_id(clazz, *ids)
  class_name =
    if clazz.is_a?(Class)
      clazz.name
    else
      clazz.to_s
    end
  indexer.remove_by_id(class_name, ids)
end

#remove_by_id!(clazz, *ids) ⇒ Object

See Sunspot.remove_by_id!



182
183
184
185
# File 'lib/sunspot/session.rb', line 182

def remove_by_id!(clazz, *ids)
  remove_by_id(clazz, ids)
  commit
end

#search(*types, &block) ⇒ Object

See Sunspot.search



57
58
59
60
# File 'lib/sunspot/session.rb', line 57

def search(*types, &block)
  search = new_search(*types, &block)
  search.execute
end