def search(query)
return [] if query.nil?
@atoms = @storage.fetch(cleanup_atoms(query), query[/\^/])
queries = parse_query(query.dup)
positive = run_queries(queries[:positive])
positive_quoted = run_quoted_queries(queries[:positive_quoted])
negative = run_queries(queries[:negative])
negative_quoted = run_quoted_queries(queries[:negative_quoted])
starts_with = run_queries(queries[:starts_with], true)
start_quoted = run_quoted_queries(queries[:start_quoted], true)
results = ActiveSupport::OrderedHash.new
if queries[:start_quoted].any?
results = merge_query_results(results, start_quoted)
end
if queries[:starts_with].any?
results = merge_query_results(results, starts_with)
end
if queries[:positive_quoted].any?
results = merge_query_results(results, positive_quoted)
end
if queries[:positive].any?
results = merge_query_results(results, positive)
end
negative_results = (negative.keys + negative_quoted.keys)
results.delete_if { |r_id, w| negative_results.include?(r_id) }
results
end