251: def add_document(doc, analyzer = nil)
252: @dir.synchronize do
253: if doc.is_a?(String) or doc.is_a?(Array)
254: doc = {@default_input_field => doc}
255: end
256:
257:
258: if @key
259: if @key.is_a?(Array)
260: query = @key.inject(BooleanQuery.new()) do |bq, field|
261: bq.add_query(TermQuery.new(field, doc[field].to_s), :must)
262: bq
263: end
264: query_delete(query)
265: else
266: id = doc[@key].to_s
267: if id
268: ensure_writer_open()
269: @writer.delete(@key, id)
270: @writer.commit
271: end
272: end
273: end
274: ensure_writer_open()
275:
276: old_analyzer = @writer.analyzer if analyzer
277: @writer.add_document(doc)
278: @writer.analyzer = old_analyzer if analyzer
279:
280: flush() if @auto_flush
281: end
282: end