From e96201773d4241ecfa5ff5f7950e0e0a34d0fa7a Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 12 Sep 2013 13:05:19 -0700 Subject: [PATCH] Index projects in the main search index Summary: Part one of a large and complicated plot: - The last filter for Maniphest "pro" queries is "Group By". - This is currently executed in a convoluted and ridiculous way, loading massive amounts of data. - The primary reason it works like it does is that we don't have a project name index available in Maniphest, so we can't sort in the DB. - So, I want to provide a name index to Maniphest and push this work to the DB. To do that, my plan is: - Index projects in Search. - Add a "did update index" event. - Have Maniphest listen for it. - When projects are updated, update their indexes in Maniphest. - Rewrite the giant mess of "group by: project" to be somewhat reasonable. - This may also extend to some future "group by: assignee". This is the first small step down this path, which just indexes projects in search. Test Plan: Ran `bin/search index --type project`, then searched for projects. Reviewers: btrahan Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D6955 --- src/__phutil_library_map__.php | 2 ++ .../PhabricatorProjectSearchIndexer.php | 25 +++++++++++++++++++ ...abricatorSearchManagementIndexWorkflow.php | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/applications/project/search/PhabricatorProjectSearchIndexer.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 378b8c78a3..dcd03733a4 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1473,6 +1473,7 @@ phutil_register_library_map(array( 'PhabricatorProjectProfileEditController' => 'applications/project/controller/PhabricatorProjectProfileEditController.php', 'PhabricatorProjectQuery' => 'applications/project/query/PhabricatorProjectQuery.php', 'PhabricatorProjectSearchEngine' => 'applications/project/query/PhabricatorProjectSearchEngine.php', + 'PhabricatorProjectSearchIndexer' => 'applications/project/search/PhabricatorProjectSearchIndexer.php', 'PhabricatorProjectStatus' => 'applications/project/constants/PhabricatorProjectStatus.php', 'PhabricatorProjectTestDataGenerator' => 'applications/project/lipsum/PhabricatorProjectTestDataGenerator.php', 'PhabricatorProjectTransaction' => 'applications/project/storage/PhabricatorProjectTransaction.php', @@ -3609,6 +3610,7 @@ phutil_register_library_map(array( 'PhabricatorProjectProfileEditController' => 'PhabricatorProjectController', 'PhabricatorProjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorProjectSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorProjectSearchIndexer' => 'PhabricatorSearchDocumentIndexer', 'PhabricatorProjectTestDataGenerator' => 'PhabricatorTestDataGenerator', 'PhabricatorProjectTransaction' => 'PhabricatorProjectDAO', 'PhabricatorProjectTransactionType' => 'PhabricatorProjectConstants', diff --git a/src/applications/project/search/PhabricatorProjectSearchIndexer.php b/src/applications/project/search/PhabricatorProjectSearchIndexer.php new file mode 100644 index 0000000000..f46796163f --- /dev/null +++ b/src/applications/project/search/PhabricatorProjectSearchIndexer.php @@ -0,0 +1,25 @@ +loadDocumentByPHID($phid); + + $doc = new PhabricatorSearchAbstractDocument(); + $doc->setPHID($project->getPHID()); + $doc->setDocumentType(PhabricatorProjectPHIDTypeProject::TYPECONST); + $doc->setDocumentTitle($project->getName()); + $doc->setDocumentCreated($project->getDateCreated()); + $doc->setDocumentModified($project->getDateModified()); + + // NOTE: This could be more full-featured, but for now we're mostly + // interested in the side effects of indexing. + + return $doc; + } +} diff --git a/src/applications/search/management/PhabricatorSearchManagementIndexWorkflow.php b/src/applications/search/management/PhabricatorSearchManagementIndexWorkflow.php index a41c06a2f3..eddc311d38 100644 --- a/src/applications/search/management/PhabricatorSearchManagementIndexWorkflow.php +++ b/src/applications/search/management/PhabricatorSearchManagementIndexWorkflow.php @@ -124,7 +124,7 @@ final class PhabricatorSearchManagementIndexWorkflow $indexer_phid = $indexer->getIndexableObject()->generatePHID(); $indexer_type = phid_get_type($indexer_phid); - if ($type && ($indexer_type != $type)) { + if ($type && strcasecmp($indexer_type, $type)) { continue; }