mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-26 08:42:41 +01:00
Separate fulltext engine extensions into "enrich" and "index" phases
Summary: Ref T12819. Some of the extensions "enrich" the document (adding more fields or relationships), while others "index" it (insert it into some kind of index for later searching). Currently, these are all muddled under a single "index" phase. However, the Ferret extension cares about fields and relationships which other extensions may add. Split this into two phases: "enrich" adds fields and relationships so other extensions can read them later if they want. "Index" happens after the document is built and has all the fields and relationships. The specific problem this solves is that comments may not have been added to the document when the Ferret extension runs. By moving them to the "enrich" phase, the Ferret engine will be able to see and index comments. Test Plan: Ran `bin/search index ...`, grepped for `indexFulltextDocument`. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12819 Differential Revision: https://secure.phabricator.com/D18513
This commit is contained in:
parent
ab99222f28
commit
f4f73e0a7e
7 changed files with 41 additions and 16 deletions
|
@ -9,11 +9,11 @@ final class PhabricatorProjectsFulltextEngineExtension
|
|||
return pht('Projects');
|
||||
}
|
||||
|
||||
public function shouldIndexFulltextObject($object) {
|
||||
public function shouldEnrichFulltextObject($object) {
|
||||
return ($object instanceof PhabricatorProjectInterface);
|
||||
}
|
||||
|
||||
public function indexFulltextObject(
|
||||
public function enrichFulltextObject(
|
||||
$object,
|
||||
PhabricatorSearchAbstractDocument $document) {
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ final class PhabricatorLiskFulltextEngineExtension
|
|||
return pht('Lisk Builtin Properties');
|
||||
}
|
||||
|
||||
public function shouldIndexFulltextObject($object) {
|
||||
public function shouldEnrichFulltextObject($object) {
|
||||
if (!($object instanceof PhabricatorLiskDAO)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ final class PhabricatorLiskFulltextEngineExtension
|
|||
return true;
|
||||
}
|
||||
|
||||
public function indexFulltextObject(
|
||||
public function enrichFulltextObject(
|
||||
$object,
|
||||
PhabricatorSearchAbstractDocument $document) {
|
||||
|
||||
|
|
|
@ -26,9 +26,16 @@ abstract class PhabricatorFulltextEngine
|
|||
$object = $this->getObject();
|
||||
|
||||
$extensions = PhabricatorFulltextEngineExtension::getAllExtensions();
|
||||
|
||||
$enrich_extensions = array();
|
||||
$index_extensions = array();
|
||||
foreach ($extensions as $key => $extension) {
|
||||
if (!$extension->shouldIndexFulltextObject($object)) {
|
||||
unset($extensions[$key]);
|
||||
if ($extension->shouldEnrichFulltextObject($object)) {
|
||||
$enrich_extensions[] = $extension;
|
||||
}
|
||||
|
||||
if ($extension->shouldIndexFulltextObject($object)) {
|
||||
$index_extensions[] = $extension;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,7 +43,11 @@ abstract class PhabricatorFulltextEngine
|
|||
|
||||
$this->buildAbstractDocument($document, $object);
|
||||
|
||||
foreach ($extensions as $extension) {
|
||||
foreach ($enrich_extensions as $extension) {
|
||||
$extension->enrichFulltextObject($object, $document);
|
||||
}
|
||||
|
||||
foreach ($index_extensions as $extension) {
|
||||
$extension->indexFulltextObject($object, $document);
|
||||
}
|
||||
|
||||
|
|
|
@ -12,11 +12,25 @@ abstract class PhabricatorFulltextEngineExtension extends Phobject {
|
|||
|
||||
abstract public function getExtensionName();
|
||||
|
||||
abstract public function shouldIndexFulltextObject($object);
|
||||
public function shouldEnrichFulltextObject($object) {
|
||||
return false;
|
||||
}
|
||||
|
||||
abstract public function indexFulltextObject(
|
||||
public function enrichFulltextObject(
|
||||
$object,
|
||||
PhabricatorSearchAbstractDocument $document);
|
||||
PhabricatorSearchAbstractDocument $document) {
|
||||
return;
|
||||
}
|
||||
|
||||
public function shouldIndexFulltextObject($object) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function indexFulltextObject(
|
||||
$object,
|
||||
PhabricatorSearchAbstractDocument $document) {
|
||||
return;
|
||||
}
|
||||
|
||||
final public static function getAllExtensions() {
|
||||
return id(new PhutilClassMapQuery())
|
||||
|
|
|
@ -9,11 +9,11 @@ final class PhabricatorSubscriptionsFulltextEngineExtension
|
|||
return pht('Subscribers');
|
||||
}
|
||||
|
||||
public function shouldIndexFulltextObject($object) {
|
||||
public function shouldEnrichFulltextObject($object) {
|
||||
return ($object instanceof PhabricatorSubscribableInterface);
|
||||
}
|
||||
|
||||
public function indexFulltextObject(
|
||||
public function enrichFulltextObject(
|
||||
$object,
|
||||
PhabricatorSearchAbstractDocument $document) {
|
||||
|
||||
|
|
|
@ -9,11 +9,11 @@ final class PhabricatorTransactionsFulltextEngineExtension
|
|||
return pht('Comments');
|
||||
}
|
||||
|
||||
public function shouldIndexFulltextObject($object) {
|
||||
public function shouldEnrichFulltextObject($object) {
|
||||
return ($object instanceof PhabricatorApplicationTransactionInterface);
|
||||
}
|
||||
|
||||
public function indexFulltextObject(
|
||||
public function enrichFulltextObject(
|
||||
$object,
|
||||
PhabricatorSearchAbstractDocument $document) {
|
||||
|
||||
|
|
|
@ -9,11 +9,11 @@ final class PhabricatorCustomFieldFulltextEngineExtension
|
|||
return pht('Custom Fields');
|
||||
}
|
||||
|
||||
public function shouldIndexFulltextObject($object) {
|
||||
public function shouldEnrichFulltextObject($object) {
|
||||
return ($object instanceof PhabricatorCustomFieldInterface);
|
||||
}
|
||||
|
||||
public function indexFulltextObject(
|
||||
public function enrichFulltextObject(
|
||||
$object,
|
||||
PhabricatorSearchAbstractDocument $document) {
|
||||
|
||||
|
|
Loading…
Reference in a new issue