Method: MiniSearch::InvertedIndex#remove

Defined in:
lib/mini_search/inverted_index.rb

#remove(id) ⇒ Object

Removes a document by id from index and documents list



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/mini_search/inverted_index.rb', line 49

def remove(id)
  document = @documents.dig(id, :document)

  terms = @indexing_pipeline.execute(document.fetch(:indexed_field))

  terms.uniq.each do |term|
    @inverted_index[term] = @inverted_index[term].reject do |document, _tf|
      document.fetch(:id) == id
    end

    @inverted_index.delete(term) if @inverted_index[term].size == 0
  end

  removed_document = @documents.delete(id)

  calculate_document_length_average

  removed_document
end