@@ -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