From a23d7082e69bb22687cb814969cd476bec8a2e27 Mon Sep 17 00:00:00 2001 From: Greg Kempe Date: Tue, 21 May 2024 08:44:28 +0200 Subject: [PATCH] search hit numbering across pages, and track search versions these make it easier to track search performance as our search configuration changes --- .../js/components/FindDocuments/index.vue | 4 +++- .../0003_searchtrace_config_version.py | 19 +++++++++++++++++++ peachjam_search/models.py | 2 ++ peachjam_search/views.py | 6 ++++++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 peachjam_search/migrations/0003_searchtrace_config_version.py diff --git a/peachjam/js/components/FindDocuments/index.vue b/peachjam/js/components/FindDocuments/index.vue index 739cb68bb..a1ae27299 100644 --- a/peachjam/js/components/FindDocuments/index.vue +++ b/peachjam/js/components/FindDocuments/index.vue @@ -257,6 +257,7 @@ export default { error: null, searchInfo: {}, page: 1, + pageSize: 10, ordering: '-score', q: '', drawerOpen: false, @@ -585,7 +586,8 @@ export default { formatResults () { for (let i = 0; i < this.searchInfo.results.length; i++) { - this.searchInfo.results[i].position = i + 1; + // number items from 1 consistently across pages + this.searchInfo.results[i].position = (this.page - 1) * this.pageSize + i + 1; } }, diff --git a/peachjam_search/migrations/0003_searchtrace_config_version.py b/peachjam_search/migrations/0003_searchtrace_config_version.py new file mode 100644 index 000000000..3b6336994 --- /dev/null +++ b/peachjam_search/migrations/0003_searchtrace_config_version.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.25 on 2024-05-21 06:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("peachjam_search", "0002_searchclick_searchtrace"), + ] + + operations = [ + migrations.AddField( + model_name="searchtrace", + name="config_version", + field=models.CharField(default="2024-05-01", max_length=50), + preserve_default=False, + ), + ] diff --git a/peachjam_search/models.py b/peachjam_search/models.py index a210fbd49..4238849ed 100644 --- a/peachjam_search/models.py +++ b/peachjam_search/models.py @@ -13,6 +13,8 @@ class SearchTrace(models.Model): """A search performed by a user.""" id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + # this is the name of the search configuration, for tracking changes across versions + config_version = models.CharField(max_length=50, null=False) request_id = models.CharField(max_length=1024, null=True, editable=False) previous_search = models.ForeignKey("self", on_delete=models.CASCADE, null=True) diff --git a/peachjam_search/views.py b/peachjam_search/views.py index 0bcfb7340..8274f83ff 100644 --- a/peachjam_search/views.py +++ b/peachjam_search/views.py @@ -42,6 +42,7 @@ class CustomPageNumberPagination(PageNumberPagination): + # NB: if this changes, update pageSize in peachjam/js/components/FindDocuments/index.vue page_size = 10 @@ -339,6 +340,10 @@ def get_context_data(self, **kwargs): class DocumentSearchViewSet(BaseDocumentViewSet): """API endpoint that allows document to be searched.""" + # This identifies the search configuration, for tracking changes across versions. + # If a search setting changes, such as a boost or a new field, then changes this to the date of the release. + config_version = "2024-05-01" + document = SearchableDocument serializer_class = SearchableDocumentSerializer permission_classes = (AllowAny,) @@ -530,6 +535,7 @@ def save_search_trace(self, response): # save the search trace return SearchTrace.objects.create( user=self.request.user if self.request.user.is_authenticated else None, + config_version=self.config_version, request_id=self.request.id if self.request.id != "none" else None, search=self.request.GET.get("search", "")[:2048], field_searches=field_searches,