Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

4230 capture user queries #4470

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
37 changes: 37 additions & 0 deletions cl/search/migrations/0035_capture_searchquery.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Generated by Django 5.1.1 on 2024-09-16 20:25

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
("search", "0034_add_harvard_pdf_to_opinioncluster"),
]

operations = [
migrations.CreateModel(
name="SearchQuery",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"date_created",
models.DateTimeField(auto_now_add=True),
),
(
"date_modified",
models.DateTimeField(auto_now=True),
),
("get_params", models.CharField(max_length=255)),
("query_time_ms", models.IntegerField()),
("hit_cache", models.BooleanField()),
],
),
]
10 changes: 10 additions & 0 deletions cl/search/migrations/0035_capture_searchquery.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
CREATE TABLE "search_searchquery" (
"id" integer NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
"date_created" timestamp with time zone NOT NULL,
"date_modified" timestamp with time zone NOT NULL,
"get_params" varchar(255) NOT NULL,
"query_time_ms" integer NOT NULL,
"hit_cache" boolean NOT NULL
);

COMMIT;
10 changes: 10 additions & 0 deletions cl/search/migrations/0035_capture_searchquery_customers.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
CREATE TABLE "search_searchquery" (
"id" integer NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
"date_created" timestamp with time zone NOT NULL,
"date_modified" timestamp with time zone NOT NULL,
"get_params" varchar(255) NOT NULL,
"query_time_ms" integer NOT NULL,
"hit_cache" boolean NOT NULL
);

COMMIT;
11 changes: 11 additions & 0 deletions cl/search/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,17 @@
HYPERSCAN_TOKENIZER = HyperscanTokenizer(cache_dir=".hyperscan")


class SearchQuery(models.Model):
date_created = models.DateTimeField(auto_now_add=True, db_index=True)
date_modified = models.DateTimeField(auto_now=True, db_index=True)
get_params = models.CharField(max_length=255)
query_time_ms = models.IntegerField()
hit_cache = models.BooleanField()

def __str__(self):
return f"Query: {self.get_params} at {self.date_created}"


class PRECEDENTIAL_STATUS:
PUBLISHED = "Published"
UNPUBLISHED = "Unpublished"
Expand Down
61 changes: 60 additions & 1 deletion cl/search/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,13 @@
UnbalancedQuotesQuery,
)
from cl.search.forms import SearchForm, _clean_form
from cl.search.models import SEARCH_TYPES, Court, Opinion, OpinionCluster
from cl.search.models import (
SEARCH_TYPES,
Court,
Opinion,
OpinionCluster,
SearchQuery,
)
from cl.stats.models import Stat
from cl.stats.utils import tally_stat
from cl.visualizations.models import SCOTUSMap
Expand Down Expand Up @@ -514,6 +520,59 @@ def show_results(request: HttpRequest) -> HttpResponse:
if not is_bot(request):
async_to_sync(tally_stat)("search.results")

# Perform the search
search_type = request.GET.get("type", SEARCH_TYPES.OPINION)
hit_cache = False # Initialize hit_cache

if search_type == SEARCH_TYPES.PARENTHETICAL:
search_results = do_es_search(request.GET.copy())
elif search_type == SEARCH_TYPES.ORAL_ARGUMENT:
# Check if waffle flag is active.
if waffle.flag_is_active(request, "oa-es-active"):
search_results = do_es_search(request.GET.copy())
else:
search_results = do_search(request.GET.copy())
elif search_type == SEARCH_TYPES.PEOPLE:
if waffle.flag_is_active(request, "p-es-active"):
search_results = do_es_search(request.GET.copy())
else:
search_results = do_search(request.GET.copy())
elif search_type in [
SEARCH_TYPES.RECAP,
SEARCH_TYPES.DOCKETS,
]:
if waffle.flag_is_active(request, "r-es-active"):
search_results = do_es_search(request.GET.copy())
else:
search_results = do_search(request.GET.copy())
elif search_type == SEARCH_TYPES.OPINION:
if waffle.flag_is_active(request, "o-es-active"):
search_results = do_es_search(request.GET.copy())
else:
search_results = do_search(request.GET.copy())
elif search_type == SEARCH_TYPES.RECAP_DOCUMENT:
search_results = do_es_search(request.GET.copy())
else:
search_results = do_search(request.GET.copy())

render_dict.update(search_results)

# Check if the search hit the cache
if "query_time" in search_results:
query_time = search_results["query_time"]
hit_cache = search_results.get("hit_cache", False)
else:
query_time = (
0 # Default if query_time is not available
)

# Create and save the SearchQuery object
SearchQuery.objects.create(
get_params=request.GET.urlencode(),
query_time_ms=query_time,
hit_cache=hit_cache,
)

# Create bare-bones alert form.
alert_form = CreateAlertForm(
initial={"query": get_string, "rate": "dly"},
Expand Down
Loading
Loading