diff options
author | Byron Jones <glob@mozilla.com> | 2015-05-15 06:12:10 +0200 |
---|---|---|
committer | Byron Jones <glob@mozilla.com> | 2015-05-15 06:12:10 +0200 |
commit | d1419f874824dd5a0a4d4499d13a0941ee434044 (patch) | |
tree | 201427af8dc43e27ca9eb26199481613db56c6bb | |
parent | 014dc8595070533eb7a14771e98640f74037ff78 (diff) | |
download | bugzilla-d1419f874824dd5a0a4d4499d13a0941ee434044.tar.gz bugzilla-d1419f874824dd5a0a4d4499d13a0941ee434044.tar.xz |
Bug 908387: product/component searching should sort hits on product/component name before hits on descriptions
-rw-r--r-- | extensions/ProdCompSearch/lib/WebService.pm | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/extensions/ProdCompSearch/lib/WebService.pm b/extensions/ProdCompSearch/lib/WebService.pm index 3bf0e1377..a28b5d059 100644 --- a/extensions/ProdCompSearch/lib/WebService.pm +++ b/extensions/ProdCompSearch/lib/WebService.pm @@ -92,12 +92,14 @@ sub prod_comp_search { push @terms, _build_terms($component, 0, 1); push @order, "products.name != " . $dbh->quote($product) if $product ne ''; push @order, "components.name != " . $dbh->quote($component) if $component ne ''; + push @order, _build_like_order($product . ' ' . $component); push @order, "products.name"; push @order, "components.name"; } else { push @terms, _build_terms($search, 1, 1); push @order, "products.name != " . $dbh->quote($search); push @order, "components.name != " . $dbh->quote($search); + push @order, _build_like_order($search); push @order, "products.name"; push @order, "components.name"; } @@ -147,4 +149,17 @@ sub _build_terms { return @terms; } +sub _build_like_order { + my ($query) = @_; + my $dbh = Bugzilla->dbh; + + my @terms; + foreach my $word (split(/[\s,]+/, $query)) { + push @terms, "CONCAT(products.name, components.name) LIKE " . $dbh->quote('%' . $word . '%') + if $word ne ''; + } + + return 'NOT(' . join(' AND ', @terms) . ')'; +} + 1; |