Differential D18550 Diff 44586 src/applications/search/fulltextstorage/PhabricatorFerretFulltextStorageEngine.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/search/fulltextstorage/PhabricatorFerretFulltextStorageEngine.php
Show First 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | public function executeSearch(PhabricatorSavedQuery $query) { | ||||
$types = $query->getParameter('types'); | $types = $query->getParameter('types'); | ||||
if ($types) { | if ($types) { | ||||
$type_map = array_select_keys($type_map, $types); | $type_map = array_select_keys($type_map, $types); | ||||
} | } | ||||
$offset = (int)$query->getParameter('offset', 0); | $offset = (int)$query->getParameter('offset', 0); | ||||
$limit = (int)$query->getParameter('limit', 25); | $limit = (int)$query->getParameter('limit', 25); | ||||
// NOTE: For now, it's okay to query with the omnipotent viewer here | |||||
// because we're just returning PHIDs which we'll filter later. | |||||
$viewer = PhabricatorUser::getOmnipotentUser(); | $viewer = PhabricatorUser::getOmnipotentUser(); | ||||
$type_results = array(); | $type_results = array(); | ||||
foreach ($type_map as $type => $spec) { | foreach ($type_map as $type => $spec) { | ||||
$engine = $spec['engine']; | $engine = $spec['engine']; | ||||
$object = $spec['object']; | $object = $spec['object']; | ||||
// NOTE: For now, it's okay to query with the omnipotent viewer here | $local_query = new PhabricatorSavedQuery(); | ||||
// because we're just returning PHIDs which we'll filter later. | $local_query->setParameter('query', $query->getParameter('query')); | ||||
$project_phids = $query->getParameter('projectPHIDs'); | |||||
if ($project_phids) { | |||||
$local_query->setParameter('projectPHIDs', $project_phids); | |||||
} | |||||
$subscriber_phids = $query->getParameter('subscriberPHIDs'); | |||||
if ($subscriber_phids) { | |||||
$local_query->setParameter('subscriberPHIDs', $subscriber_phids); | |||||
} | |||||
$search_engine = $engine->newSearchEngine() | |||||
->setViewer($viewer); | |||||
$type_query = $engine->newConfiguredFulltextQuery( | $engine_query = $search_engine->buildQueryFromSavedQuery($local_query) | ||||
$object, | ->setViewer($viewer); | ||||
$query, | |||||
$viewer); | |||||
$type_query | $engine_query | ||||
->withFerretQuery($engine, $query) | |||||
->setOrder('relevance') | ->setOrder('relevance') | ||||
->setLimit($offset + $limit); | ->setLimit($offset + $limit); | ||||
$results = $type_query->execute(); | $results = $engine_query->execute(); | ||||
$results = mpull($results, null, 'getPHID'); | $results = mpull($results, null, 'getPHID'); | ||||
$type_results[$type] = $results; | $type_results[$type] = $results; | ||||
} | } | ||||
$list = array(); | $list = array(); | ||||
foreach ($type_results as $type => $results) { | foreach ($type_results as $type => $results) { | ||||
$list += $results; | $list += $results; | ||||
} | } | ||||
Show All 19 Lines |