[aur-dev] [PATCH v2 3/3] Support boolean operators in search queries

Lukas Fleischer lfleischer at archlinux.org
Fri May 22 15:29:29 UTC 2015


This adds very basic support for boolean search queries such as "video
or movie" or "lin and not linux". However, nested queries such as
"(video or movie) and editing" are not (yet) supported.

Signed-off-by: Lukas Fleischer <lfleischer at archlinux.org>
---
 web/lib/pkgfuncs.inc.php | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
index 11ca591..2b5afaa 100644
--- a/web/lib/pkgfuncs.inc.php
+++ b/web/lib/pkgfuncs.inc.php
@@ -602,21 +602,38 @@ function pkg_search_page($SID="") {
 		else {
 			/* Search by name and description (default). */
 			$count = 0;
+			$q_where .= "AND (";
+			$op = "";
 
 			foreach (str_getcsv($_GET['K'], ' ') as $term) {
 				if ($term == "") {
 					continue;
 				}
+				if ($count > 0 && strtolower($term) == "and") {
+					$op = "AND ";
+					continue;
+				}
+				if ($count > 0 && strtolower($term) == "or") {
+					$op = "OR ";
+					continue;
+				}
+			        if ($count > 0 && strtolower($term) == "not") {
+					$op .= "NOT ";
+					continue;
+				}
 
 				$term = "%" . addcslashes($term, '%_') . "%";
-				$q_where .= "AND (Packages.Name LIKE " . $dbh->quote($term) . " OR ";
+				$q_where .= $op . " (Packages.Name LIKE " . $dbh->quote($term) . " OR ";
 				$q_where .= "Description LIKE " . $dbh->quote($term) . ") ";
 
 				$count++;
 				if ($count >= 20) {
 					break;
 				}
+				$op = "AND ";
 			}
+
+			$q_where .= ") ";
 		}
 	}
 
-- 
2.4.1


More information about the aur-dev mailing list