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

#batchObject

See Sunspot.batch



216
217
218
219
220
# File 'lib/sunspot/session.rb', line 216

def batch
  indexer.start_batch
  yield
  indexer.flush_batch
end

#commitObject

See Sunspot.commit



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

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

#commit_if_delete_dirtyObject

See Sunspot.commit_if_delete_dirty



209
210
211
# File 'lib/sunspot/session.rb', line 209

def commit_if_delete_dirty
  commit if delete_dirty?
end

#commit_if_dirtyObject

See Sunspot.commit_if_dirty



195
196
197
# File 'lib/sunspot/session.rb', line 195

def commit_if_dirty
  commit if dirty?
end

#delete_dirty?Boolean

See Sunspot.delete_dirty?

Returns:

  • (Boolean)


202
203
204
# File 'lib/sunspot/session.rb', line 202

def delete_dirty?
  @deletes > 0
end

#dirty?Boolean

See Sunspot.dirty?

Returns:

  • (Boolean)


188
189
190
# File 'lib/sunspot/session.rb', line 188

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

#remove(*objects, &block) ⇒ Object

See Sunspot.remove



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/sunspot/session.rb', line 113

def remove(*objects, &block)
  if block
    types = objects
    conjunction = Query::Connective::Conjunction.new
    if types.length == 1
      conjunction.add_restriction(TypeField.instance, Query::Restriction::EqualTo, types.first)
    else
      conjunction.add_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) ⇒ Object

See Sunspot.remove!



137
138
139
140
# File 'lib/sunspot/session.rb', line 137

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

#remove_all(*classes) ⇒ Object

See Sunspot.remove_all



166
167
168
169
170
171
172
173
174
175
# File 'lib/sunspot/session.rb', line 166

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!



180
181
182
183
# File 'lib/sunspot/session.rb', line 180

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

#remove_by_id(clazz, id) ⇒ Object

See Sunspot.remove_by_id



145
146
147
148
149
150
151
152
153
# File 'lib/sunspot/session.rb', line 145

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

#remove_by_id!(clazz, id) ⇒ Object

See Sunspot.remove_by_id!



158
159
160
161
# File 'lib/sunspot/session.rb', line 158

def remove_by_id!(clazz, id)
  remove_by_id(clazz, id)
  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