Skip to content

Commit 97fbaaf

Browse files
fix sorting to use neighbor distance (#212)
* fix sorting to use neighbor distance * fix sql --------- Co-authored-by: Vijay Swamidass <[email protected]>
1 parent ef34a34 commit 97fbaaf

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

app/controllers/base_documents_controller.rb

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@ class BaseDocumentsController < ApplicationController
1111
def index
1212
@documents = Document.includes(:library, :user)
1313

14-
@documents = if params[:sort] == 'questions'
15-
@documents.order(questions_count: :desc)
16-
elsif params[:sort] == 'tokens'
17-
@documents.order(token_count: :desc)
18-
else
19-
@documents.order(updated_at: :desc)
20-
end
14+
# Only apply default sorting if not doing similarity search
15+
unless params[:similar_to].present?
16+
@documents = if params[:sort] == 'questions'
17+
@documents.order(questions_count: :desc)
18+
elsif params[:sort] == 'tokens'
19+
@documents.order(token_count: :desc)
20+
else
21+
@documents.order(updated_at: :desc)
22+
end
23+
end
2124

2225
library_id = params[:library_id]
2326
if library_id.present?
@@ -57,9 +60,13 @@ def index
5760
embedding = get_embedding(params[:similar_to])
5861
# Get similar documents but preserve existing filters
5962
similar_docs = related_documents_from_embedding_by_libraries(embedding, library_id)
60-
# Apply the similarity search as an additional filter by getting the IDs
61-
similar_doc_ids = similar_docs.pluck(:id)
62-
@documents = @documents.where(id: similar_doc_ids)
63+
64+
# Sort by neighbor_distance (ascending - closest first) and convert to array
65+
# This maintains the similarity order without needing raw SQL
66+
@documents = similar_docs.sort_by(&:neighbor_distance)
67+
68+
# Convert to Kaminari-compatible array for pagination
69+
@documents = Kaminari.paginate_array(@documents)
6370
end
6471

6572
@documents = @documents.search_by_title_and_document(params[:contains]) if params[:contains].present?

0 commit comments

Comments
 (0)