aboutsummaryrefslogtreecommitdiffstats
path: root/layerindex
diff options
context:
space:
mode:
authorElliot Smith <elliot.smith@intel.com>2016-03-17 14:26:39 +0000
committerElliot Smith <elliot.smith@intel.com>2016-05-23 17:14:03 +0100
commit3155206e54413f72df3b3b41280eafd332a58ba4 (patch)
treeaacc8c55b7a4282759d7446d8aadd86e6071322d /layerindex
parent0300063abb407d0c10ba7231fdaf7278cefbc405 (diff)
downloadopenembedded-core-contrib-3155206e54413f72df3b3b41280eafd332a58ba4.tar.gz
search: show matches against pn at top of recipe search results
Using the search box creates a query against the pns, summaries, descriptions and filenames of recipes. This results in a lot of spurious results for common terms like "git" when performing a recipe search. Make the results more useful by: * Only searching against pn, description and summary (not file). * Putting matches against pn at the top of the list, followed by matches against description and summary. [YOCTO #9159] Signed-off-by: Elliot Smith <elliot.smith@intel.com>
Diffstat (limited to 'layerindex')
-rw-r--r--layerindex/views.py28
1 files changed, 23 insertions, 5 deletions
diff --git a/layerindex/views.py b/layerindex/views.py
index 7e877acdfb..898a7c4be8 100644
--- a/layerindex/views.py
+++ b/layerindex/views.py
@@ -11,6 +11,7 @@ from django.core.exceptions import PermissionDenied
from django.template import RequestContext
from layerindex.models import Branch, LayerItem, LayerMaintainer, LayerBranch, LayerDependency, LayerNote, Recipe, Machine, BBClass, BBAppend, RecipeChange, RecipeChangeset, ClassicRecipe
from datetime import datetime
+from itertools import chain
from django.views.generic import TemplateView, DetailView, ListView
from django.views.generic.edit import CreateView, DeleteView, UpdateView
from django.views.generic.base import RedirectView
@@ -373,18 +374,28 @@ class RecipeSearchView(ListView):
query_string = self.request.GET.get('q', '')
init_qs = Recipe.objects.filter(layerbranch__branch__name=self.kwargs['branch'])
if query_string.strip():
- entry_query = simplesearch.get_query(query_string, ['pn', 'summary', 'description', 'filename'])
- qs = init_qs.filter(entry_query).order_by('pn', 'layerbranch__layer')
+ order_by = ('pn', 'layerbranch__layer')
+
+ entry_query = simplesearch.get_query(query_string, ['pn'])
+ qs1 = init_qs.filter(entry_query).order_by(*order_by)
+ qs1 = recipes_preferred_count(qs1)
+
+ entry_query = simplesearch.get_query(query_string, ['description', 'summary'])
+ qs2 = init_qs.filter(entry_query).order_by(*order_by)
+ qs2 = recipes_preferred_count(qs2)
+
+ qs = list(chain(qs1, qs2))
else:
if 'q' in self.request.GET:
qs = init_qs.order_by('pn', 'layerbranch__layer')
+ qs = list(recipes_preferred_count(qs))
else:
# It's a bit too slow to return all records by default, and most people
# won't actually want that (if they do they can just hit the search button
# with no query string)
return Recipe.objects.none()
- return recipes_preferred_count(qs)
+ return qs
def get_context_data(self, **kwargs):
context = super(RecipeSearchView, self).get_context_data(**kwargs)
@@ -689,8 +700,15 @@ class ClassicRecipeSearchView(RecipeSearchView):
if category:
init_qs = init_qs.filter(classic_category__icontains=category)
if query_string.strip():
- entry_query = simplesearch.get_query(query_string, ['pn', 'summary', 'description', 'filename'])
- qs = init_qs.filter(entry_query).order_by('pn', 'layerbranch__layer')
+ order_by = ('pn', 'layerbranch__layer')
+
+ entry_query = simplesearch.get_query(query_string, ['pn'])
+ qs1 = init_qs.filter(entry_query).order_by(*order_by)
+
+ entry_query = simplesearch.get_query(query_string, ['summary', 'description'])
+ qs2 = init_qs.filter(entry_query).order_by(*order_by)
+
+ qs = list(chain(qs1, qs2))
else:
if 'q' in self.request.GET:
qs = init_qs.order_by('pn', 'layerbranch__layer')