Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F98121146
PhabricatorSearchEngine.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Jan 10, 00:32
Size
3 KB
Mime Type
text/x-php
Expires
Sun, Jan 12, 00:32 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
23509925
Attached To
rPH Phabricator
PhabricatorSearchEngine.php
View Options
<?php
/**
* Base class for Phabricator search engine providers. Each engine must offer
* three capabilities: indexing, searching, and reconstruction (this can be
* stubbed out if an engine can't reasonably do it, it is used for debugging).
*/
abstract
class
PhabricatorSearchEngine
extends
Phobject
{
/* -( Engine Metadata )---------------------------------------------------- */
/**
* Return a unique, nonempty string which identifies this storage engine.
*
* @return string Unique string for this engine, max length 32.
* @task meta
*/
abstract
public
function
getEngineIdentifier
();
/**
* Prioritize this engine relative to other engines.
*
* Engines with a smaller priority number get an opportunity to write files
* first. Generally, lower-latency filestores should have lower priority
* numbers, and higher-latency filestores should have higher priority
* numbers. Setting priority to approximately the number of milliseconds of
* read latency will generally produce reasonable results.
*
* In conjunction with filesize limits, the goal is to store small files like
* profile images, thumbnails, and text snippets in lower-latency engines,
* and store large files in higher-capacity engines.
*
* @return float Engine priority.
* @task meta
*/
abstract
public
function
getEnginePriority
();
/**
* Return `true` if the engine is currently writable.
*
* Engines that are disabled or missing configuration should return `false`
* to prevent new writes. If writes were made with this engine in the past,
* the application may still try to perform reads.
*
* @return bool True if this engine can support new writes.
* @task meta
*/
abstract
public
function
isEnabled
();
/* -( Managing Documents )------------------------------------------------- */
/**
* Update the index for an abstract document.
*
* @param PhabricatorSearchAbstractDocument Document to update.
* @return void
*/
abstract
public
function
reindexAbstractDocument
(
PhabricatorSearchAbstractDocument
$document
);
/**
* Reconstruct the document for a given PHID. This is used for debugging
* and does not need to be perfect if it is unreasonable to implement it.
*
* @param phid Document PHID to reconstruct.
* @return PhabricatorSearchAbstractDocument Abstract document.
*/
abstract
public
function
reconstructDocument
(
$phid
);
/**
* Execute a search query.
*
* @param PhabricatorSavedQuery A query to execute.
* @return list A list of matching PHIDs.
*/
abstract
public
function
executeSearch
(
PhabricatorSavedQuery
$query
);
/**
* Does the search index exist?
*
* @return bool
*/
abstract
public
function
indexExists
();
/**
* Is the index in a usable state?
*
* @return bool
*/
public
function
indexIsSane
()
{
return
$this
->
indexExists
();
}
/**
* Do any sort of setup for the search index.
*
* @return void
*/
public
function
initIndex
()
{}
/* -( Loading Storage Engines )-------------------------------------------- */
/**
* @task load
*/
public
static
function
loadAllEngines
()
{
return
id
(
new
PhutilClassMapQuery
())
->
setAncestorClass
(
__CLASS__
)
->
setUniqueMethod
(
'getEngineIdentifier'
)
->
setSortMethod
(
'getEnginePriority'
)
->
execute
();
}
/**
* @task load
*/
public
static
function
loadActiveEngines
()
{
$engines
=
self
::
loadAllEngines
();
$active
=
array
();
foreach
(
$engines
as
$key
=>
$engine
)
{
if
(!
$engine
->
isEnabled
())
{
continue
;
}
$active
[
$key
]
=
$engine
;
}
return
$active
;
}
public
static
function
loadEngine
()
{
return
head
(
self
::
loadActiveEngines
());
}
}
Event Timeline
Log In to Comment