Performance tweak.

Change-Id: I29da8639d8e8ebda7ebb226f3f989173436b0b82
diff --git a/services/license_check.php b/services/license_check.php
index 628513b..9d36bb2 100755
--- a/services/license_check.php
+++ b/services/license_check.php
@@ -28,14 +28,17 @@
  *
  * usage example:
  *
- * curl -X POST http://localhost/projects/services/licenses.php \
+ * curl -X POST http://localhost/projects/services/license_check.php \
+ * --data-urlencode content@maven.deps
+ *
+ * curl -X POST http://localhost/projects/services/license_check.php \
  * -d $'content=npm/npmjs/@theia/variable-resolver/0.3.19\nnpm/npmjs/@theia/outline-view/0.3.19'
  *
- * curl -X POST "http://localhost/projects/services/licenses.php" \
+ * curl -X POST "http://localhost/projects/services/license_check.php" \
  * -d "content=`mvn dependency:list -DskipTests -Dmaven.javadoc.skip=true | grep -Poh '\S+(?=:compile)' | sort | uniq`" | jsonpp | less
  *
  * yarn list | grep -Poh "(?:([^\/\s]+)\/)?([^\/\s]+)@\D*(\d+(?:\.\d+)*)" \
- * | curl -X POST "http://localhost/projects/services/licenses.php?XDEBUG_SESSION_START=ECLIPSE_DBGP" \
+ * | curl -X POST "http://localhost/projects/services/license_check.php?XDEBUG_SESSION_START=ECLIPSE_DBGP" \
  * --data-urlencode content@- | jsonpp | less
  *
  * Note that this works with an instance running on localhost.
@@ -157,7 +160,7 @@
 function matchAgainstEclipseProjects(&$results) {
 	foreach(array_keys($results['unmatched']) as $id) {
 		if ($parts = preg_split('/\//', $id)) {
-			if (preg_match('/^org\.(?:eclipse|polarsys|locationtech)/', $parts[2])) {
+			if (matchesEclipseNamespace($parts[2])) {
 				unset($results['unmatched'][$id]);
 				$results['approved'][$id] = array(
 						'id' => $id,
@@ -186,6 +189,17 @@
 	}
 }
 
+function matchesEclipseNamespace($namespace) {
+	// TODO Make this data-driven
+	if (preg_match('/^org\.eclipse\./', $namespace)) return true;
+	if (preg_match('/^org\.polarsys\./', $namespace)) return true;
+	if (preg_match('/^org\.locationtech\./', $namespace)) return true;
+	if (preg_match('/^jakarta\./', $namespace)) return true;
+	if (preg_match('/^org\.aspectj/', $namespace)) return true;
+
+	return false;
+}
+
 /*
  * Match against the consolidated data from Eclipse Foundation
  * sources. The consolidated data is stored in the dashboard
@@ -217,9 +231,12 @@
 		 */
 		$matches = null;
 		if (preg_match('/^((?:[^\/]+\/){4}(?:\d+\.\d+))(?:\.(\d+))?/', $id, $matches)) {
+			$like = $matches[1] . '.%';
 			$regexp = preg_quote($matches[1]) . '\.[0-9]+';
 			$version = isset($matches[2]) ? $matches[2] : '0';
-			$where[] = "id regexp '{$regexp}'";
+			// regexp is expensive, so test first with like and then regexp.
+			// This improves performance by about five-fold.
+			$where[] = "(id like '{$like}' and id regexp '{$regexp}')";
 			// Order results so that the one with the service release number that's closest
 			// to the one we want is at the top of the list.
 			$order[] = "abs(substring_index(substring_index(id,'/',-1),'.',-1) - {$version})";