diff --git a/src/applications/search/ngrams/PhabricatorSearchNgrams.php b/src/applications/search/ngrams/PhabricatorSearchNgrams.php --- a/src/applications/search/ngrams/PhabricatorSearchNgrams.php +++ b/src/applications/search/ngrams/PhabricatorSearchNgrams.php @@ -63,9 +63,6 @@ case 'index': $token = ' '.$token.' '; break; - case 'prefix': - $token = ' '.$token; - break; } $len = (strlen($token) - 2); diff --git a/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php b/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php --- a/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php +++ b/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php @@ -2411,30 +2411,29 @@ protected function buildNgramsJoinClause(AphrontDatabaseConnection $conn) { $flat = array(); foreach ($this->ngrams as $spec) { - $index = $spec['index']; - $value = $spec['value']; $length = $spec['length']; - if ($length >= 3) { - $ngrams = $index->getNgramsFromString($value, 'query'); - $prefix = false; - } else if ($length == 2) { - $ngrams = $index->getNgramsFromString($value, 'prefix'); - $prefix = false; - } else { - $ngrams = array(' '.$value); - $prefix = true; + if ($length < 3) { + continue; } + $index = $spec['index']; + $value = $spec['value']; + + $ngrams = $index->getNgramsFromString($value, 'query'); + foreach ($ngrams as $ngram) { $flat[] = array( 'table' => $index->getTableName(), 'ngram' => $ngram, - 'prefix' => $prefix, ); } } + if (!$flat) { + return array(); + } + // MySQL only allows us to join a maximum of 61 tables per query. Each // ngram is going to cost us a join toward that limit, so if the user // specified a very long query string, just pick 16 of the ngrams @@ -2456,31 +2455,18 @@ foreach ($flat as $spec) { $table = $spec['table']; $ngram = $spec['ngram']; - $prefix = $spec['prefix']; $alias = 'ngm'.$idx++; - if ($prefix) { - $joins[] = qsprintf( - $conn, - 'JOIN %T %T ON %T.objectID = %Q AND %T.ngram LIKE %>', - $table, - $alias, - $alias, - $id_column, - $alias, - $ngram); - } else { - $joins[] = qsprintf( - $conn, - 'JOIN %T %T ON %T.objectID = %Q AND %T.ngram = %s', - $table, - $alias, - $alias, - $id_column, - $alias, - $ngram); - } + $joins[] = qsprintf( + $conn, + 'JOIN %T %T ON %T.objectID = %Q AND %T.ngram = %s', + $table, + $alias, + $alias, + $id_column, + $alias, + $ngram); } return $joins;