termCounts = Counter()
if results.has_matched_terms():
for hit in results:
- for _, term in hit.matched_terms():
- termCounts[term] += 1
+ for _, match in hit.matched_terms():
+ termCounts[match] += 1
terms = [t for t, _ in termCounts.most_common(limit)]
+ term_encoded = term.encode("UTF-8")
+ if term_encoded in terms:
+ terms.insert(0, terms.pop(terms.index(term_encoded)))
+
return terms
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data, [])
+ def test_search_autocomplete_search_term(self):
+ """
+ GIVEN:
+ - Search results for autocomplete include the exact search term
+ WHEN:
+ - API request for autocomplete
+ THEN:
+ - The search term is returned first in the autocomplete results
+ """
+ d1 = Document.objects.create(
+ title="doc1",
+ content="automobile automatic autobots automobile auto",
+ checksum="1",
+ )
+
+ with AsyncWriter(index.open_index()) as writer:
+ index.update_document(writer, d1)
+
+ response = self.client.get("/api/search/autocomplete/?term=auto")
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.assertEqual(response.data[0], b"auto")
+
@pytest.mark.skip(reason="Not implemented yet")
def test_search_spelling_correction(self):
with AsyncWriter(index.open_index()) as writer: