mirror of
https://github.com/ArchiveBox/ArchiveBox
synced 2024-11-10 06:34:16 +00:00
Implement searching individual fields (#1457)
This commit is contained in:
commit
920b92e658
2 changed files with 35 additions and 2 deletions
|
@ -387,13 +387,37 @@ class PublicIndexView(ListView):
|
|||
|
||||
def get_queryset(self, **kwargs):
|
||||
qs = super().get_queryset(**kwargs)
|
||||
query = self.request.GET.get('q')
|
||||
if query and query.strip():
|
||||
query = self.request.GET.get('q', default = '').strip()
|
||||
|
||||
if not query:
|
||||
return qs.distinct()
|
||||
|
||||
query_type = self.request.GET.get('query_type')
|
||||
|
||||
if not query_type or query_type == 'all':
|
||||
qs = qs.filter(Q(title__icontains=query) | Q(url__icontains=query) | Q(timestamp__icontains=query) | Q(tags__name__icontains=query))
|
||||
try:
|
||||
qs = qs | query_search_index(query)
|
||||
except Exception as err:
|
||||
print(f'[!] Error while using search backend: {err.__class__.__name__} {err}')
|
||||
elif query_type == 'fulltext':
|
||||
try:
|
||||
qs = qs | query_search_index(query)
|
||||
except Exception as err:
|
||||
print(f'[!] Error while using search backend: {err.__class__.__name__} {err}')
|
||||
elif query_type == 'meta':
|
||||
qs = qs.filter(Q(title__icontains=query) | Q(url__icontains=query) | Q(timestamp__icontains=query) | Q(tags__name__icontains=query))
|
||||
elif query_type == 'url':
|
||||
qs = qs.filter(Q(url__icontains=query))
|
||||
elif query_type == 'title':
|
||||
qs = qs.filter(Q(title__icontains=query))
|
||||
elif query_type == 'timestamp':
|
||||
qs = qs.filter(Q(timestamp__icontains=query))
|
||||
elif query_type == 'tags':
|
||||
qs = qs.filter(Q(tags__name__icontains=query))
|
||||
else:
|
||||
print(f'[!] Unknown value for query_type: "{query_type}"')
|
||||
|
||||
return qs.distinct()
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
|
|
|
@ -6,6 +6,15 @@
|
|||
<form id="changelist-search" action="{% url 'public-index' %}" method="get">
|
||||
<div>
|
||||
<label for="searchbar"><img src="/static/admin/img/search.svg" alt="Search"></label>
|
||||
<select name="query_type" id="query_type">
|
||||
<option value="all" selected>All</option>
|
||||
<option value="fulltext">Content</option>
|
||||
<option value="meta">Metadata</option>
|
||||
<option value="url">URL</option>
|
||||
<option value="title">Title</option>
|
||||
<option value="timestamp">Timestamp</option>
|
||||
<option value="tags">Tags</option>
|
||||
</select>
|
||||
<input type="text" size="40" name="q" value="" id="searchbar" autofocus placeholder="Title, URL, tags, timestamp, or content...".>
|
||||
<input type="submit" value="Search" style="height: 36px; padding-top: 6px; margin: 8px"/>
|
||||
<input type="button"
|
||||
|
|
Loading…
Reference in a new issue