263: def add_document(doc, analyzer = nil)
264: @dir.synchronize do
265: ensure_writer_open()
266: if doc.is_a?(String) or doc.is_a?(Array)
267: doc = {@default_input_field => doc}
268: end
269:
270:
271: if @key
272: if @key.is_a?(Array)
273: query = @key.inject(BooleanQuery.new()) do |bq, field|
274: bq.add_query(TermQuery.new(field, doc[field].to_s), :must)
275: bq
276: end
277: query_delete(query)
278: else
279: id = doc[@key].to_s
280: if id
281: @writer.delete(@key, id)
282: end
283: end
284: end
285: ensure_writer_open()
286:
287: if analyzer
288: old_analyzer = @writer.analyzer
289: @writer.analyzer = analyzer
290: @writer.add_document(doc)
291: @writer.analyzer = old_analyzer
292: else
293: @writer.add_document(doc)
294: end
295:
296: flush() if @auto_flush
297: end
298: end