mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-13 04:53:26 +00:00
Make search engine a real service
This commit is contained in:
@@ -78,7 +78,6 @@ class Root implements ControllerProviderInterface
|
|||||||
$perPage = $modCol * $modRow;
|
$perPage = $modCol * $modRow;
|
||||||
|
|
||||||
$options = SearchEngineOptions::fromRequest($app, $request);
|
$options = SearchEngineOptions::fromRequest($app, $request);
|
||||||
$app['phraseanet.SE']->setOptions($options);
|
|
||||||
|
|
||||||
$currentPage = (int) $request->request->get('pag', 0);
|
$currentPage = (int) $request->request->get('pag', 0);
|
||||||
|
|
||||||
@@ -87,7 +86,7 @@ class Root implements ControllerProviderInterface
|
|||||||
$currentPage = 1;
|
$currentPage = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = $app['phraseanet.SE']->query($query, ($currentPage - 1) * $perPage, $perPage);
|
$result = $app['phraseanet.SE']->query($query, ($currentPage - 1) * $perPage, $perPage, $options);
|
||||||
|
|
||||||
$userQuery = new UserQuery();
|
$userQuery = new UserQuery();
|
||||||
$userQuery->setUsrId($app['authentication']->getUser()->get_id());
|
$userQuery->setUsrId($app['authentication']->getUser()->get_id());
|
||||||
|
@@ -64,8 +64,6 @@ class Query implements ControllerProviderInterface
|
|||||||
|
|
||||||
$perPage = (int) $app['authentication']->getUser()->getPrefs('images_per_page');
|
$perPage = (int) $app['authentication']->getUser()->getPrefs('images_per_page');
|
||||||
|
|
||||||
$app['phraseanet.SE']->setOptions($options);
|
|
||||||
|
|
||||||
$page = (int) $request->request->get('pag');
|
$page = (int) $request->request->get('pag');
|
||||||
$firstPage = $page < 1;
|
$firstPage = $page < 1;
|
||||||
|
|
||||||
@@ -74,7 +72,7 @@ class Query implements ControllerProviderInterface
|
|||||||
$page = 1;
|
$page = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = $app['phraseanet.SE']->query($query, (($page - 1) * $perPage), $perPage);
|
$result = $app['phraseanet.SE']->query($query, (($page - 1) * $perPage), $perPage, $options);
|
||||||
|
|
||||||
$userQuery = new UserQuery();
|
$userQuery = new UserQuery();
|
||||||
$userQuery->setUsrId($app['authentication']->getUser()->get_id());
|
$userQuery->setUsrId($app['authentication']->getUser()->get_id());
|
||||||
@@ -195,6 +193,7 @@ class Query implements ControllerProviderInterface
|
|||||||
'results' => $result,
|
'results' => $result,
|
||||||
'highlight' => $result->getQuery(),
|
'highlight' => $result->getQuery(),
|
||||||
'searchEngine' => $app['phraseanet.SE'],
|
'searchEngine' => $app['phraseanet.SE'],
|
||||||
|
'searchOptions' => $options,
|
||||||
'suggestions' => $prop
|
'suggestions' => $prop
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
@@ -224,7 +223,6 @@ class Query implements ControllerProviderInterface
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$options = SearchEngineOptions::hydrate($app, $optionsSerial);
|
$options = SearchEngineOptions::hydrate($app, $optionsSerial);
|
||||||
$app['phraseanet.SE']->setOptions($options);
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$app->abort(400, 'Provided search engine options are not valid');
|
$app->abort(400, 'Provided search engine options are not valid');
|
||||||
}
|
}
|
||||||
@@ -232,7 +230,7 @@ class Query implements ControllerProviderInterface
|
|||||||
$pos = (int) $request->request->get('pos', 0);
|
$pos = (int) $request->request->get('pos', 0);
|
||||||
$query = $request->request->get('query', '');
|
$query = $request->request->get('query', '');
|
||||||
|
|
||||||
$record = new \record_preview($app, 'RESULT', $pos, '', $app['phraseanet.SE'], $query);
|
$record = new \record_preview($app, 'RESULT', $pos, '', $app['phraseanet.SE'], $query, $options);
|
||||||
|
|
||||||
return $app->json([
|
return $app->json([
|
||||||
'current' => $app['twig']->render('prod/preview/result_train.html.twig', [
|
'current' => $app['twig']->render('prod/preview/result_train.html.twig', [
|
||||||
|
@@ -63,7 +63,7 @@ class Records implements ControllerProviderInterface
|
|||||||
$app->abort(400);
|
$app->abort(400);
|
||||||
}
|
}
|
||||||
|
|
||||||
$searchEngine = null;
|
$searchEngine = $options = null;
|
||||||
$train = '';
|
$train = '';
|
||||||
|
|
||||||
if ('' === $env = strtoupper($request->get('env', ''))) {
|
if ('' === $env = strtoupper($request->get('env', ''))) {
|
||||||
@@ -75,7 +75,6 @@ class Records implements ControllerProviderInterface
|
|||||||
try {
|
try {
|
||||||
$options = SearchEngineOptions::hydrate($app, $request->get('options_serial'));
|
$options = SearchEngineOptions::hydrate($app, $request->get('options_serial'));
|
||||||
$searchEngine = $app['phraseanet.SE'];
|
$searchEngine = $app['phraseanet.SE'];
|
||||||
$searchEngine->setOptions($options);
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$app->abort(400, 'Search-engine options are not valid or missing');
|
$app->abort(400, 'Search-engine options are not valid or missing');
|
||||||
}
|
}
|
||||||
@@ -91,7 +90,8 @@ class Records implements ControllerProviderInterface
|
|||||||
$pos < 0 ? 0 : $pos,
|
$pos < 0 ? 0 : $pos,
|
||||||
$request->get('cont', ''),
|
$request->get('cont', ''),
|
||||||
$searchEngine,
|
$searchEngine,
|
||||||
$query
|
$query,
|
||||||
|
$options
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($record->is_from_reg()) {
|
if ($record->is_from_reg()) {
|
||||||
@@ -116,7 +116,8 @@ class Records implements ControllerProviderInterface
|
|||||||
"desc" => $app['twig']->render('prod/preview/caption.html.twig', [
|
"desc" => $app['twig']->render('prod/preview/caption.html.twig', [
|
||||||
'record' => $record,
|
'record' => $record,
|
||||||
'highlight' => $query,
|
'highlight' => $query,
|
||||||
'searchEngine' => $searchEngine
|
'searchEngine' => $searchEngine,
|
||||||
|
'searchOptions' => $options,
|
||||||
]),
|
]),
|
||||||
"html_preview" => $app['twig']->render('common/preview.html.twig', [
|
"html_preview" => $app['twig']->render('common/preview.html.twig', [
|
||||||
'record' => $record
|
'record' => $record
|
||||||
|
@@ -115,11 +115,11 @@ class Tooltip implements ControllerProviderInterface
|
|||||||
$record = new \record_adapter($app, $sbas_id, $record_id, $number);
|
$record = new \record_adapter($app, $sbas_id, $record_id, $number);
|
||||||
|
|
||||||
$search_engine = $app['phraseanet.SE'];
|
$search_engine = $app['phraseanet.SE'];
|
||||||
|
$search_engine_options = null;
|
||||||
|
|
||||||
if ($context == 'answer') {
|
if ($context == 'answer') {
|
||||||
try {
|
try {
|
||||||
$search_engine_options = SearchEngineOptions::hydrate($app, $app['request']->request->get('options_serial'));
|
$search_engine_options = SearchEngineOptions::hydrate($app, $app['request']->request->get('options_serial'));
|
||||||
$search_engine->setOptions($search_engine_options);
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -128,10 +128,11 @@ class Tooltip implements ControllerProviderInterface
|
|||||||
return $app['twig']->render(
|
return $app['twig']->render(
|
||||||
'prod/Tooltip/Caption.html.twig'
|
'prod/Tooltip/Caption.html.twig'
|
||||||
, [
|
, [
|
||||||
'record' => $record,
|
'record' => $record,
|
||||||
'view' => $context,
|
'view' => $context,
|
||||||
'highlight' => $app['request']->request->get('query'),
|
'highlight' => $app['request']->request->get('query'),
|
||||||
'searchEngine' => $search_engine,
|
'searchEngine' => $search_engine,
|
||||||
|
'searchOptions' => $search_engine_options,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -25,11 +25,6 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
{
|
{
|
||||||
private $initialized;
|
private $initialized;
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @var SearchEngineOptions
|
|
||||||
*/
|
|
||||||
private $options;
|
|
||||||
private $app;
|
private $app;
|
||||||
private $dateFields;
|
private $dateFields;
|
||||||
private $configuration;
|
private $configuration;
|
||||||
@@ -47,7 +42,6 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
public function __construct(Application $app)
|
public function __construct(Application $app)
|
||||||
{
|
{
|
||||||
$this->app = $app;
|
$this->app = $app;
|
||||||
$this->options = new SearchEngineOptions();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -339,28 +333,12 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setOptions(SearchEngineOptions $options)
|
public function query($query, $offset, $perPage, SearchEngineOptions $options = null)
|
||||||
{
|
{
|
||||||
$this->options = $options;
|
if (null === $options) {
|
||||||
|
$options = new SearchEngineOptions();
|
||||||
|
}
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function resetOptions()
|
|
||||||
{
|
|
||||||
$this->options = new SearchEngineOptions();
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function query($query, $offset, $perPage)
|
|
||||||
{
|
|
||||||
$this->initialize();
|
$this->initialize();
|
||||||
$this->checkSession();
|
$this->checkSession();
|
||||||
|
|
||||||
@@ -372,8 +350,8 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
$query = "all";
|
$query = "all";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->options->getRecordType()) {
|
if ($options->getRecordType()) {
|
||||||
$query .= ' AND recordtype=' . $this->options->getRecordType();
|
$query .= ' AND recordtype=' . $options->getRecordType();
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = 'SELECT query, query_time, duration, total FROM cache WHERE session_id = :ses_id';
|
$sql = 'SELECT query, query_time, duration, total FROM cache WHERE session_id = :ses_id';
|
||||||
@@ -394,8 +372,8 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
|
|
||||||
if ($this->resetCacheNextQuery === true) {
|
if ($this->resetCacheNextQuery === true) {
|
||||||
phrasea_clear_cache($this->app['session']->get('phrasea_session_id'));
|
phrasea_clear_cache($this->app['session']->get('phrasea_session_id'));
|
||||||
$this->addQuery($query);
|
$this->addQuery($query, $options);
|
||||||
$this->executeQuery($query);
|
$this->executeQuery($query, $options);
|
||||||
|
|
||||||
$sql = 'SELECT query, query_time, duration, total FROM cache WHERE session_id = :ses_id';
|
$sql = 'SELECT query, query_time, duration, total FROM cache WHERE session_id = :ses_id';
|
||||||
$stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql);
|
$stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql);
|
||||||
@@ -534,13 +512,13 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
* @param string $query
|
* @param string $query
|
||||||
* @return PhraseaEngine
|
* @return PhraseaEngine
|
||||||
*/
|
*/
|
||||||
private function executeQuery($query)
|
private function executeQuery($query, SearchEngineOptions $options)
|
||||||
{
|
{
|
||||||
$nbanswers = $total_time = 0;
|
$nbanswers = $total_time = 0;
|
||||||
$sort = '';
|
$sort = '';
|
||||||
|
|
||||||
if ($this->options->getSortBy()) {
|
if ($options->getSortBy()) {
|
||||||
switch ($this->options->getSortOrder()) {
|
switch ($options->getSortOrder()) {
|
||||||
case SearchEngineOptions::SORT_MODE_ASC:
|
case SearchEngineOptions::SORT_MODE_ASC:
|
||||||
$sort = '+';
|
$sort = '+';
|
||||||
break;
|
break;
|
||||||
@@ -549,13 +527,13 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
$sort = '-';
|
$sort = '-';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$sort .= '0' . $this->options->getSortBy();
|
$sort .= '0' . $options->getSortBy();
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->queries as $sbas_id => $qry) {
|
foreach ($this->queries as $sbas_id => $qry) {
|
||||||
$BF = [];
|
$BF = [];
|
||||||
|
|
||||||
foreach ($this->options->getBusinessFieldsOn() as $collection) {
|
foreach ($options->getBusinessFieldsOn() as $collection) {
|
||||||
// limit business field query to databox local collection
|
// limit business field query to databox local collection
|
||||||
if ($sbas_id === $collection->get_sbas_id()) {
|
if ($sbas_id === $collection->get_sbas_id()) {
|
||||||
$BF[] = $collection->get_base_id();
|
$BF[] = $collection->get_base_id();
|
||||||
@@ -570,10 +548,10 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
, $this->app['conf']->get(['main', 'key'])
|
, $this->app['conf']->get(['main', 'key'])
|
||||||
, $this->app['session']->get('usr_id')
|
, $this->app['session']->get('usr_id')
|
||||||
, false
|
, false
|
||||||
, $this->options->getSearchType() == SearchEngineOptions::RECORD_GROUPING ? PHRASEA_MULTIDOC_REGONLY : PHRASEA_MULTIDOC_DOCONLY
|
, $options->getSearchType() == SearchEngineOptions::RECORD_GROUPING ? PHRASEA_MULTIDOC_REGONLY : PHRASEA_MULTIDOC_DOCONLY
|
||||||
, $sort
|
, $sort
|
||||||
, $BF
|
, $BF
|
||||||
, $this->options->isStemmed() ? $this->options->getLocale() : null
|
, $options->isStemmed() ? $options->getLocale() : null
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($results) {
|
if ($results) {
|
||||||
@@ -603,7 +581,7 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function autocomplete($query)
|
public function autocomplete($query, SearchEngineOptions $options)
|
||||||
{
|
{
|
||||||
return new ArrayCollection();
|
return new ArrayCollection();
|
||||||
}
|
}
|
||||||
@@ -611,8 +589,12 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function excerpt($query, $fields, \record_adapter $record)
|
public function excerpt($query, $fields, \record_adapter $record, SearchEngineOptions $options = null)
|
||||||
{
|
{
|
||||||
|
if (null === $options) {
|
||||||
|
$options = new SearchEngineOptions();
|
||||||
|
}
|
||||||
|
|
||||||
$ret = [];
|
$ret = [];
|
||||||
|
|
||||||
$this->initialize();
|
$this->initialize();
|
||||||
@@ -670,13 +652,13 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
* @param string $query
|
* @param string $query
|
||||||
* @return PhraseaEngine
|
* @return PhraseaEngine
|
||||||
*/
|
*/
|
||||||
private function addQuery($query)
|
private function addQuery($query, SearchEngineOptions $options)
|
||||||
{
|
{
|
||||||
foreach ($this->options->getDataboxes() as $databox) {
|
foreach ($options->getDataboxes() as $databox) {
|
||||||
$this->queries[$databox->get_sbas_id()] = $query;
|
$this->queries[$databox->get_sbas_id()] = $query;
|
||||||
}
|
}
|
||||||
|
|
||||||
$status = $this->options->getStatus();
|
$status = $options->getStatus();
|
||||||
|
|
||||||
foreach ($this->queries as $sbas => $qs) {
|
foreach ($this->queries as $sbas => $qs) {
|
||||||
if ($status) {
|
if ($status) {
|
||||||
@@ -704,32 +686,32 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
$this->queries[$sbas] .= ' AND (recordstatus=' . $requestStat . ')';
|
$this->queries[$sbas] .= ' AND (recordstatus=' . $requestStat . ')';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($this->options->getFields()) {
|
if ($options->getFields()) {
|
||||||
$this->queries[$sbas] .= ' IN (' . implode(' OR ', array_map(function (\databox_field $field) {
|
$this->queries[$sbas] .= ' IN (' . implode(' OR ', array_map(function (\databox_field $field) {
|
||||||
return $field->get_name();
|
return $field->get_name();
|
||||||
}, $this->options->getFields())) . ')';
|
}, $options->getFields())) . ')';
|
||||||
}
|
}
|
||||||
if (($this->options->getMinDate() || $this->options->getMaxDate()) && $this->options->getDateFields()) {
|
if (($options->getMinDate() || $options->getMaxDate()) && $options->getDateFields()) {
|
||||||
if ($this->options->getMinDate()) {
|
if ($options->getMinDate()) {
|
||||||
$this->queries[$sbas] .= ' AND ( ' . implode(' >= ' . $this->options->getMinDate()->format('Y-m-d') . ' OR ', array_map(function (\databox_field $field) { return $field->get_name(); }, $this->options->getDateFields())) . ' >= ' . $this->options->getMinDate()->format('Y-m-d') . ' ) ';
|
$this->queries[$sbas] .= ' AND ( ' . implode(' >= ' . $options->getMinDate()->format('Y-m-d') . ' OR ', array_map(function (\databox_field $field) { return $field->get_name(); }, $options->getDateFields())) . ' >= ' . $options->getMinDate()->format('Y-m-d') . ' ) ';
|
||||||
}
|
}
|
||||||
if ($this->options->getMaxDate()) {
|
if ($options->getMaxDate()) {
|
||||||
$this->queries[$sbas] .= ' AND ( ' . implode(' <= ' . $this->options->getMaxDate()->format('Y-m-d') . ' OR ', array_map(function (\databox_field $field) { return $field->get_name(); }, $this->options->getDateFields())) . ' <= ' . $this->options->getMaxDate()->format('Y-m-d') . ' ) ';
|
$this->queries[$sbas] .= ' AND ( ' . implode(' <= ' . $options->getMaxDate()->format('Y-m-d') . ' OR ', array_map(function (\databox_field $field) { return $field->get_name(); }, $options->getDateFields())) . ' <= ' . $options->getMaxDate()->format('Y-m-d') . ' ) ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->singleParse('main', $query);
|
$this->singleParse('main', $query, $options);
|
||||||
|
|
||||||
foreach ($this->queries as $sbas => $db_query) {
|
foreach ($this->queries as $sbas => $db_query) {
|
||||||
$this->singleParse($sbas, $this->queries[$sbas]);
|
$this->singleParse($sbas, $this->queries[$sbas], $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
$base_ids = array_map(function (\collection $collection) {
|
$base_ids = array_map(function (\collection $collection) {
|
||||||
return $collection->get_base_id();
|
return $collection->get_base_id();
|
||||||
}, $this->options->getCollections());
|
}, $options->getCollections());
|
||||||
|
|
||||||
foreach ($this->options->getDataboxes() as $databox) {
|
foreach ($options->getDataboxes() as $databox) {
|
||||||
$sbas_id = $databox->get_sbas_id();
|
$sbas_id = $databox->get_sbas_id();
|
||||||
|
|
||||||
$this->colls[$sbas_id] = [];
|
$this->colls[$sbas_id] = [];
|
||||||
@@ -771,9 +753,9 @@ class PhraseaEngine implements SearchEngineInterface
|
|||||||
* @param string $query
|
* @param string $query
|
||||||
* @return PhraseaEngine
|
* @return PhraseaEngine
|
||||||
*/
|
*/
|
||||||
private function singleParse($sbas, $query)
|
private function singleParse($sbas, $query, SearchEngineOptions $options)
|
||||||
{
|
{
|
||||||
$this->qp[$sbas] = new PhraseaEngineQueryParser($this->app, $this->options->getLocale());
|
$this->qp[$sbas] = new PhraseaEngineQueryParser($this->app, $options->getLocale());
|
||||||
$this->qp[$sbas]->debug = false;
|
$this->qp[$sbas]->debug = false;
|
||||||
|
|
||||||
$simple_treeq = $this->qp[$sbas]->parsequery($query);
|
$simple_treeq = $this->qp[$sbas]->parsequery($query);
|
||||||
|
@@ -162,32 +162,16 @@ interface SearchEngineInterface
|
|||||||
*/
|
*/
|
||||||
public function updateFeedEntry(FeedEntry $entry);
|
public function updateFeedEntry(FeedEntry $entry);
|
||||||
|
|
||||||
/**
|
|
||||||
* Set options to search-engine
|
|
||||||
*
|
|
||||||
* @param SearchEngineOptions $options
|
|
||||||
* @return SearchEngineInterface
|
|
||||||
* @throws RuntimeException
|
|
||||||
*/
|
|
||||||
public function setOptions(SearchEngineOptions $options);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset search-engine options
|
|
||||||
*
|
|
||||||
* @return SearchEngineInterface
|
|
||||||
* @throws RuntimeException
|
|
||||||
*/
|
|
||||||
public function resetOptions();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param string $query
|
* @param string $query
|
||||||
* @param integer $offset
|
* @param integer $offset
|
||||||
* @param integer $perPage
|
* @param integer $perPage
|
||||||
|
* @param SearchEngineOptions $options
|
||||||
*
|
*
|
||||||
* @return SearchEngineResult
|
* @return SearchEngineResult
|
||||||
*/
|
*/
|
||||||
public function query($query, $offset, $perPage);
|
public function query($query, $offset, $perPage, SearchEngineOptions $options = null);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an array of suggestions corresponding to the last word of the
|
* Return an array of suggestions corresponding to the last word of the
|
||||||
@@ -197,7 +181,7 @@ interface SearchEngineInterface
|
|||||||
*
|
*
|
||||||
* @return ArrayCollection A collection of SearchEngineSuggestion
|
* @return ArrayCollection A collection of SearchEngineSuggestion
|
||||||
*/
|
*/
|
||||||
public function autocomplete($query);
|
public function autocomplete($query, SearchEngineOptions $options);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Highlight the fields of a record
|
* Highlight the fields of a record
|
||||||
@@ -208,7 +192,7 @@ interface SearchEngineInterface
|
|||||||
*
|
*
|
||||||
* @return array The array of highlighted fields
|
* @return array The array of highlighted fields
|
||||||
*/
|
*/
|
||||||
public function excerpt($query, $fields, \record_adapter $record);
|
public function excerpt($query, $fields, \record_adapter $record, SearchEngineOptions $options = null);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reset the cache of the SE (if applicable)
|
* Reset the cache of the SE (if applicable)
|
||||||
|
@@ -44,13 +44,11 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
private $dateFields;
|
private $dateFields;
|
||||||
protected $configuration;
|
protected $configuration;
|
||||||
protected $configurationPanel;
|
protected $configurationPanel;
|
||||||
protected $options;
|
|
||||||
protected $app;
|
protected $app;
|
||||||
|
|
||||||
public function __construct(Application $app, $host, $port, $rt_host, $rt_port)
|
public function __construct(Application $app, $host, $port, $rt_host, $rt_port)
|
||||||
{
|
{
|
||||||
$this->app = $app;
|
$this->app = $app;
|
||||||
$this->options = new SearchEngineOptions();
|
|
||||||
|
|
||||||
$this->sphinx = new \SphinxClient();
|
$this->sphinx = new \SphinxClient();
|
||||||
$this->sphinx->SetServer($host, $port);
|
$this->sphinx->SetServer($host, $port);
|
||||||
@@ -417,28 +415,6 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
throw new RuntimeException('Feed Entry indexing not supported by Sphinx Search Engine');
|
throw new RuntimeException('Feed Entry indexing not supported by Sphinx Search Engine');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function setOptions(SearchEngineOptions $options)
|
|
||||||
{
|
|
||||||
$this->options = $options;
|
|
||||||
$this->applyOptions($options);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function resetOptions()
|
|
||||||
{
|
|
||||||
$this->options = new SearchEngineOptions();
|
|
||||||
$this->resetSphinx();
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function resetSphinx()
|
private function resetSphinx()
|
||||||
{
|
{
|
||||||
$this->sphinx->ResetGroupBy();
|
$this->sphinx->ResetGroupBy();
|
||||||
@@ -450,8 +426,14 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function query($query, $offset, $perPage)
|
public function query($query, $offset, $perPage, SearchEngineOptions $options = null)
|
||||||
{
|
{
|
||||||
|
if (null === $options) {
|
||||||
|
$options = new SearchEngineOptions();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->applyOptions($options);
|
||||||
|
|
||||||
assert(is_int($offset));
|
assert(is_int($offset));
|
||||||
assert($offset >= 0);
|
assert($offset >= 0);
|
||||||
assert(is_int($perPage));
|
assert(is_int($perPage));
|
||||||
@@ -468,7 +450,7 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
$this->sphinx->SetLimits($offset, $perPage);
|
$this->sphinx->SetLimits($offset, $perPage);
|
||||||
$this->sphinx->SetMatchMode(SPH_MATCH_EXTENDED2);
|
$this->sphinx->SetMatchMode(SPH_MATCH_EXTENDED2);
|
||||||
|
|
||||||
$index = $this->getQueryIndex($query);
|
$index = $this->getQueryIndex($query, $options);
|
||||||
$res = $this->sphinx->Query($query, $index);
|
$res = $this->sphinx->Query($query, $index);
|
||||||
|
|
||||||
$results = new ArrayCollection();
|
$results = new ArrayCollection();
|
||||||
@@ -513,7 +495,7 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$suggestions = $this->getSuggestions($query);
|
$suggestions = $this->getSuggestions($query, $options);
|
||||||
$propositions = '';
|
$propositions = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -523,29 +505,37 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function autocomplete($query)
|
public function autocomplete($query, SearchEngineOptions $options)
|
||||||
{
|
{
|
||||||
|
$this->applyOptions($options);
|
||||||
|
|
||||||
$words = explode(" ", $this->cleanupQuery($query));
|
$words = explode(" ", $this->cleanupQuery($query));
|
||||||
|
|
||||||
return $this->getSuggestions(array_pop($words));
|
return $this->getSuggestions(array_pop($words), $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function excerpt($query, $fields, \record_adapter $record)
|
public function excerpt($query, $fields, \record_adapter $record, SearchEngineOptions $options = null)
|
||||||
{
|
{
|
||||||
|
if (null === $options) {
|
||||||
|
$options = new SearchEngineOptions();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->applyOptions($options);
|
||||||
|
|
||||||
$index = '';
|
$index = '';
|
||||||
// in this case search is done on metas
|
// in this case search is done on metas
|
||||||
if ($this->options->getFields() || $this->options->getBusinessFieldsOn()) {
|
if ($options->getFields() || $options->getBusinessFieldsOn()) {
|
||||||
if ($this->options->isStemmed() && $this->options->getLocale()) {
|
if ($options->isStemmed() && $options->getLocale()) {
|
||||||
$index = 'metadatas' . $this->CRCdatabox($record->get_databox()) . '_stemmed_' . $this->options->getLocale();
|
$index = 'metadatas' . $this->CRCdatabox($record->get_databox()) . '_stemmed_' . $options->getLocale();
|
||||||
} else {
|
} else {
|
||||||
$index = 'metadatas' . $this->CRCdatabox($record->get_databox());
|
$index = 'metadatas' . $this->CRCdatabox($record->get_databox());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ($this->options->isStemmed() && $this->options->getLocale()) {
|
if ($options->isStemmed() && $options->getLocale()) {
|
||||||
$index = 'documents' . $this->CRCdatabox($record->get_databox()) . '_stemmed_' . $this->options->getLocale();
|
$index = 'documents' . $this->CRCdatabox($record->get_databox()) . '_stemmed_' . $options->getLocale();
|
||||||
} else {
|
} else {
|
||||||
$index = 'documents' . $this->CRCdatabox($record->get_databox());
|
$index = 'documents' . $this->CRCdatabox($record->get_databox());
|
||||||
}
|
}
|
||||||
@@ -775,7 +765,7 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
* @param string $query
|
* @param string $query
|
||||||
* @return ArrayCollection An array collection of SearchEngineSuggestion
|
* @return ArrayCollection An array collection of SearchEngineSuggestion
|
||||||
*/
|
*/
|
||||||
private function getSuggestions($query)
|
private function getSuggestions($query, SearchEngineOptions $options)
|
||||||
{
|
{
|
||||||
// First we split the query into simple words
|
// First we split the query into simple words
|
||||||
$words = explode(" ", $this->cleanupQuery(mb_strtolower($query)));
|
$words = explode(" ", $this->cleanupQuery(mb_strtolower($query)));
|
||||||
@@ -798,10 +788,10 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
// As we got words, we look for alternate word for each of them
|
// As we got words, we look for alternate word for each of them
|
||||||
if (function_exists('enchant_broker_init') && $this->options->getLocale()) {
|
if (function_exists('enchant_broker_init') && $options->getLocale()) {
|
||||||
$broker = enchant_broker_init();
|
$broker = enchant_broker_init();
|
||||||
if (enchant_broker_dict_exists($broker, $this->options->getLocale())) {
|
if (enchant_broker_dict_exists($broker, $options->getLocale())) {
|
||||||
$dictionnary = enchant_broker_request_dict($broker, $this->options->getLocale());
|
$dictionnary = enchant_broker_request_dict($broker, $options->getLocale());
|
||||||
|
|
||||||
foreach ($words as $word) {
|
foreach ($words as $word) {
|
||||||
|
|
||||||
@@ -820,7 +810,7 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
* @todo enhance the trigramm query, as it could be sent in one batch
|
* @todo enhance the trigramm query, as it could be sent in one batch
|
||||||
*/
|
*/
|
||||||
foreach ($altVersions as $word => $versions) {
|
foreach ($altVersions as $word => $versions) {
|
||||||
$altVersions[$word] = array_unique(array_merge($versions, $this->get_sugg_trigrams($word)));
|
$altVersions[$word] = array_unique(array_merge($versions, $this->get_sugg_trigrams($word, $options)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// We now build an array of all possibilities based on the original query
|
// We now build an array of all possibilities based on the original query
|
||||||
@@ -842,7 +832,7 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
$max_results = 0;
|
$max_results = 0;
|
||||||
|
|
||||||
foreach ($queries as $alt_query) {
|
foreach ($queries as $alt_query) {
|
||||||
$results = $this->sphinx->Query($alt_query, $this->getQueryIndex($alt_query));
|
$results = $this->sphinx->Query($alt_query, $this->getQueryIndex($alt_query, $options));
|
||||||
if ($results !== false && isset($results['total_found'])) {
|
if ($results !== false && isset($results['total_found'])) {
|
||||||
if ($results['total_found'] > 0) {
|
if ($results['total_found'] > 0) {
|
||||||
|
|
||||||
@@ -886,7 +876,7 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
return $trigrams;
|
return $trigrams;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function get_sugg_trigrams($word)
|
private function get_sugg_trigrams($word, SearchEngineOptions $options)
|
||||||
{
|
{
|
||||||
$trigrams = $this->BuildTrigrams($word);
|
$trigrams = $this->BuildTrigrams($word);
|
||||||
$query = "\"$trigrams\"/1";
|
$query = "\"$trigrams\"/1";
|
||||||
@@ -903,7 +893,7 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
|
|
||||||
$indexes = [];
|
$indexes = [];
|
||||||
|
|
||||||
foreach ($this->options->getDataboxes() as $databox) {
|
foreach ($options->getDataboxes() as $databox) {
|
||||||
$indexes[] = 'suggest' . $this->CRCdatabox($databox);
|
$indexes[] = 'suggest' . $this->CRCdatabox($databox);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -926,29 +916,29 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
return $words;
|
return $words;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getQueryIndex($query)
|
private function getQueryIndex($query, SearchEngineOptions $options)
|
||||||
{
|
{
|
||||||
$index = '*';
|
$index = '*';
|
||||||
|
|
||||||
$index_keys = [];
|
$index_keys = [];
|
||||||
|
|
||||||
foreach ($this->options->getDataboxes() as $databox) {
|
foreach ($options->getDataboxes() as $databox) {
|
||||||
$index_keys[] = $this->CRCdatabox($databox);
|
$index_keys[] = $this->CRCdatabox($databox);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count($index_keys) > 0) {
|
if (count($index_keys) > 0) {
|
||||||
if ($this->options->getFields() || $this->options->getBusinessFieldsOn()) {
|
if ($options->getFields() || $options->getBusinessFieldsOn()) {
|
||||||
if ($query !== '' && $this->options->isStemmed() && $this->options->getLocale()) {
|
if ($query !== '' && $options->isStemmed() && $options->getLocale()) {
|
||||||
$index = 'metadatas' . implode('_stemmed_' . $this->options->getLocale() . ', metadatas', $index_keys) . '_stemmed_' . $this->options->getLocale();
|
$index = 'metadatas' . implode('_stemmed_' . $options->getLocale() . ', metadatas', $index_keys) . '_stemmed_' . $options->getLocale();
|
||||||
$index .= ', metas_realtime_stemmed_' . $this->options->getLocale() . '_' . implode(', metas_realtime_stemmed_' . $this->options->getLocale() . '_', $index_keys);
|
$index .= ', metas_realtime_stemmed_' . $options->getLocale() . '_' . implode(', metas_realtime_stemmed_' . $options->getLocale() . '_', $index_keys);
|
||||||
} else {
|
} else {
|
||||||
$index = 'metadatas' . implode(',metadatas', $index_keys);
|
$index = 'metadatas' . implode(',metadatas', $index_keys);
|
||||||
$index .= ', metas_realtime' . implode(', metas_realtime', $index_keys);
|
$index .= ', metas_realtime' . implode(', metas_realtime', $index_keys);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ($query !== '' && $this->options->isStemmed() && $this->options->getLocale()) {
|
if ($query !== '' && $options->isStemmed() && $options->getLocale()) {
|
||||||
$index = 'documents' . implode('_stemmed_' . $this->options->getLocale() . ', documents', $index_keys) . '_stemmed_' . $this->options->getLocale();
|
$index = 'documents' . implode('_stemmed_' . $options->getLocale() . ', documents', $index_keys) . '_stemmed_' . $options->getLocale();
|
||||||
$index .= ', docs_realtime_stemmed_' . $this->options->getLocale() . '_' . implode(', docs_realtime_stemmed_' . $this->options->getLocale() . '_', $index_keys);
|
$index .= ', docs_realtime_stemmed_' . $options->getLocale() . '_' . implode(', docs_realtime_stemmed_' . $options->getLocale() . '_', $index_keys);
|
||||||
} else {
|
} else {
|
||||||
$index = 'documents' . implode(', documents', $index_keys);
|
$index = 'documents' . implode(', documents', $index_keys);
|
||||||
$index .= ', docs_realtime' . implode(', docs_realtime', $index_keys);
|
$index .= ', docs_realtime' . implode(', docs_realtime', $index_keys);
|
||||||
@@ -1079,5 +1069,4 @@ class SphinxSearchEngine implements SearchEngineInterface
|
|||||||
{
|
{
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -870,11 +870,9 @@ class API_V1_adapter extends API_V1_Abstract
|
|||||||
$perPage = (int) $request->get('per_page') ? : 10;
|
$perPage = (int) $request->get('per_page') ? : 10;
|
||||||
|
|
||||||
$query = (string) $request->get('query');
|
$query = (string) $request->get('query');
|
||||||
|
|
||||||
$this->app['phraseanet.SE']->setOptions($options);
|
|
||||||
$this->app['phraseanet.SE']->resetCache();
|
$this->app['phraseanet.SE']->resetCache();
|
||||||
|
|
||||||
$search_result = $this->app['phraseanet.SE']->query($query, $offsetStart, $perPage);
|
$search_result = $this->app['phraseanet.SE']->query($query, $offsetStart, $perPage, $options);
|
||||||
|
|
||||||
$userQuery = new UserQuery();
|
$userQuery = new UserQuery();
|
||||||
$userQuery->setUsrId($this->app['authentication']->getUser()->get_id());
|
$userQuery->setUsrId($this->app['authentication']->getUser()->get_id());
|
||||||
|
@@ -11,11 +11,12 @@
|
|||||||
|
|
||||||
use Alchemy\Phrasea\Application;
|
use Alchemy\Phrasea\Application;
|
||||||
use Alchemy\Phrasea\SearchEngine\SearchEngineInterface;
|
use Alchemy\Phrasea\SearchEngine\SearchEngineInterface;
|
||||||
|
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
|
||||||
|
|
||||||
interface caption_interface
|
interface caption_interface
|
||||||
{
|
{
|
||||||
|
|
||||||
public function __construct(Application $app, record_Interface $record, databox $databox);
|
public function __construct(Application $app, record_Interface $record, databox $databox);
|
||||||
|
|
||||||
public function get_highlight_fields($highlight = '', Array $grep_fields = null, SearchEngineInterface $searchEngine = null);
|
public function get_highlight_fields($highlight = '', Array $grep_fields = null, SearchEngineInterface $searchEngine = null, $includeBusiness = false, SearchEngineOptions $options = null);
|
||||||
}
|
}
|
||||||
|
@@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
use Alchemy\Phrasea\Application;
|
use Alchemy\Phrasea\Application;
|
||||||
use Alchemy\Phrasea\SearchEngine\SearchEngineInterface;
|
use Alchemy\Phrasea\SearchEngine\SearchEngineInterface;
|
||||||
|
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
|
||||||
use Symfony\Component\Yaml\Dumper as YamlDumper;
|
use Symfony\Component\Yaml\Dumper as YamlDumper;
|
||||||
|
|
||||||
class caption_record implements caption_interface, cache_cacheableInterface
|
class caption_record implements caption_interface, cache_cacheableInterface
|
||||||
@@ -284,9 +285,9 @@ class caption_record implements caption_interface, cache_cacheableInterface
|
|||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function get_highlight_fields($highlight = '', Array $grep_fields = null, SearchEngineInterface $searchEngine = null, $includeBusiness = false)
|
public function get_highlight_fields($highlight = '', Array $grep_fields = null, SearchEngineInterface $searchEngine = null, $includeBusiness = false, SearchEngineOptions $options = null)
|
||||||
{
|
{
|
||||||
return $this->highlight_fields($highlight, $grep_fields, $searchEngine, $includeBusiness);
|
return $this->highlight_fields($highlight, $grep_fields, $searchEngine, $includeBusiness, $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -296,7 +297,7 @@ class caption_record implements caption_interface, cache_cacheableInterface
|
|||||||
* @param SearchEngineInterface $searchEngine
|
* @param SearchEngineInterface $searchEngine
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function highlight_fields($highlight, Array $grep_fields = null, SearchEngineInterface $searchEngine = null, $includeBusiness = false)
|
protected function highlight_fields($highlight, Array $grep_fields = null, SearchEngineInterface $searchEngine = null, $includeBusiness = false, SearchEngineOptions $options = null)
|
||||||
{
|
{
|
||||||
$fields = [];
|
$fields = [];
|
||||||
|
|
||||||
@@ -317,7 +318,7 @@ class caption_record implements caption_interface, cache_cacheableInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($searchEngine instanceof SearchEngineInterface) {
|
if ($searchEngine instanceof SearchEngineInterface) {
|
||||||
$ret = $searchEngine->excerpt($highlight, $fields, $this->record);
|
$ret = $searchEngine->excerpt($highlight, $fields, $this->record, $options);
|
||||||
|
|
||||||
if ($ret) {
|
if ($ret) {
|
||||||
$n = -1;
|
$n = -1;
|
||||||
|
@@ -14,6 +14,7 @@ use Alchemy\Phrasea\Border\File;
|
|||||||
use Alchemy\Phrasea\Metadata\Tag\TfFilename;
|
use Alchemy\Phrasea\Metadata\Tag\TfFilename;
|
||||||
use Alchemy\Phrasea\Metadata\Tag\TfBasename;
|
use Alchemy\Phrasea\Metadata\Tag\TfBasename;
|
||||||
use Alchemy\Phrasea\SearchEngine\SearchEngineInterface;
|
use Alchemy\Phrasea\SearchEngine\SearchEngineInterface;
|
||||||
|
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
|
||||||
use Doctrine\ORM\EntityManager;
|
use Doctrine\ORM\EntityManager;
|
||||||
use MediaAlchemyst\Specification\SpecificationInterface;
|
use MediaAlchemyst\Specification\SpecificationInterface;
|
||||||
use MediaVorus\Media\MediaInterface;
|
use MediaVorus\Media\MediaInterface;
|
||||||
@@ -871,7 +872,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface
|
|||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function get_title($highlight = false, SearchEngineInterface $searchEngine = null, $removeExtension = null)
|
public function get_title($highlight = false, SearchEngineInterface $searchEngine = null, $removeExtension = null, SearchEngineOptions $options = null)
|
||||||
{
|
{
|
||||||
$cache = !$highlight && !$searchEngine && !$removeExtension;
|
$cache = !$highlight && !$searchEngine && !$removeExtension;
|
||||||
|
|
||||||
@@ -896,7 +897,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (count($fields_to_retrieve) > 0) {
|
if (count($fields_to_retrieve) > 0) {
|
||||||
$retrieved_fields = $this->get_caption()->get_highlight_fields($highlight, $fields_to_retrieve, $searchEngine);
|
$retrieved_fields = $this->get_caption()->get_highlight_fields($highlight, $fields_to_retrieve, $searchEngine, false, $options);
|
||||||
$titles = [];
|
$titles = [];
|
||||||
foreach ($retrieved_fields as $key => $value) {
|
foreach ($retrieved_fields as $key => $value) {
|
||||||
if (trim($value['value'] === ''))
|
if (trim($value['value'] === ''))
|
||||||
|
@@ -13,6 +13,7 @@ use Alchemy\Phrasea\Application;
|
|||||||
use Alchemy\Phrasea\Model\Entities\Basket;
|
use Alchemy\Phrasea\Model\Entities\Basket;
|
||||||
use Alchemy\Phrasea\Model\Entities\BasketElement;
|
use Alchemy\Phrasea\Model\Entities\BasketElement;
|
||||||
use Alchemy\Phrasea\SearchEngine\SearchEngineInterface;
|
use Alchemy\Phrasea\SearchEngine\SearchEngineInterface;
|
||||||
|
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
|
||||||
|
|
||||||
class record_preview extends record_adapter
|
class record_preview extends record_adapter
|
||||||
{
|
{
|
||||||
@@ -89,7 +90,7 @@ class record_preview extends record_adapter
|
|||||||
*
|
*
|
||||||
* @return record_preview
|
* @return record_preview
|
||||||
*/
|
*/
|
||||||
public function __construct(Application $app, $env, $pos, $contId, SearchEngineInterface $search_engine = null, $query = '')
|
public function __construct(Application $app, $env, $pos, $contId, SearchEngineInterface $search_engine = null, $query = '', SearchEngineOptions $options = null)
|
||||||
{
|
{
|
||||||
$number = null;
|
$number = null;
|
||||||
$this->env = $env;
|
$this->env = $env;
|
||||||
@@ -101,7 +102,7 @@ class record_preview extends record_adapter
|
|||||||
throw new \LogicException('Search Engine should be provided');
|
throw new \LogicException('Search Engine should be provided');
|
||||||
}
|
}
|
||||||
|
|
||||||
$results = $search_engine->query($query, (int) ($pos), 1);
|
$results = $search_engine->query($query, (int) ($pos), 1, $options);
|
||||||
|
|
||||||
if ($results->getResults()->isEmpty()) {
|
if ($results->getResults()->isEmpty()) {
|
||||||
throw new Exception('Record introuvable');
|
throw new Exception('Record introuvable');
|
||||||
|
@@ -12,15 +12,15 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if view == 'answer' %}
|
{% if view == 'answer' %}
|
||||||
{{cap_ans.format_caption(record, highlight|default(''), searchEngine|default(null), business)}}
|
{{cap_ans.format_caption(record, highlight|default(''), searchEngine|default(null), searchOptions|default(null), business)}}
|
||||||
{% elseif view == 'lazaret' %}
|
{% elseif view == 'lazaret' %}
|
||||||
{{cap_laz.format_caption(record, highlight|default(''), searchEngine|default(null), business)}}
|
{{cap_laz.format_caption(record, highlight|default(''), searchEngine|default(null), searchOptions|default(null), business)}}
|
||||||
{% elseif view == 'preview' %}
|
{% elseif view == 'preview' %}
|
||||||
{{cap_prev.format_caption(record, highlight|default(''), searchEngine|default(null), business)}}
|
{{cap_prev.format_caption(record, highlight|default(''), searchEngine|default(null), searchOptions|default(null), business)}}
|
||||||
{% elseif view == 'basket' %}
|
{% elseif view == 'basket' %}
|
||||||
{{cap_bas.format_caption(record, highlight|default(''), searchEngine|default(null), business)}}
|
{{cap_bas.format_caption(record, highlight|default(''), searchEngine|default(null), searchOptions|default(null), business)}}
|
||||||
{% elseif view == 'overview' %}
|
{% elseif view == 'overview' %}
|
||||||
{{cap_ovr.format_caption(record, highlight|default(''), searchEngine|default(null), business)}}
|
{{cap_ovr.format_caption(record, highlight|default(''), searchEngine|default(null), searchOptions|default(null), business)}}
|
||||||
{% elseif view == 'publi' %}
|
{% elseif view == 'publi' %}
|
||||||
{{cap_pub.format_caption(record, '', null, business)}}
|
{{cap_pub.format_caption(record, '', null, null, business)}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{% macro format_caption(record, highlight, searchEngine, includeBusiness) %}
|
{% macro format_caption(record, highlight, searchEngine, options, includeBusiness) %}
|
||||||
{% for value in record.get_caption().get_highlight_fields(highlight, null, searchEngine, includeBusiness) %}
|
{% for value in record.get_caption().get_highlight_fields(highlight, null, searchEngine, includeBusiness, options) %}
|
||||||
<div class="desc{% if loop.index is odd %}im{% endif %}pair"><b>{{ value.label }}</b> : {{ value.value | thesaurus }}</div>
|
<div class="desc{% if loop.index is odd %}im{% endif %}pair"><b>{{ value.label }}</b> : {{ value.value | thesaurus }}</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if app['authentication'].getUser().getPrefs('technical_display') == 'group' %}
|
{% if app['authentication'].getUser().getPrefs('technical_display') == 'group' %}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{% macro format_caption(record, highlight, searchEngine, includeBusiness) %}
|
{% macro format_caption(record, highlight, searchEngine, options, includeBusiness) %}
|
||||||
{% for value in record.get_caption().get_highlight_fields(highlight, null, searchEngine, includeBusiness) %}
|
{% for value in record.get_caption().get_highlight_fields(highlight, null, searchEngine, includeBusiness, options) %}
|
||||||
<div class="desc{% if loop.index is odd %}im{% endif %}pair"><b>{{ value.label }}</b> : {{ value.value | thesaurus }}</div>
|
<div class="desc{% if loop.index is odd %}im{% endif %}pair"><b>{{ value.label }}</b> : {{ value.value | thesaurus }}</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{% macro format_caption(record, highlight, searchEngine, includeBusiness) %}
|
{% macro format_caption(record, highlight, searchEngine, options, includeBusiness) %}
|
||||||
{% for value in record.get_caption().get_highlight_fields(highlight, null, searchEngine, includeBusiness) %}
|
{% for value in record.get_caption().get_highlight_fields(highlight, null, searchEngine, includeBusiness, options) %}
|
||||||
<div class="desc{% if loop.index is odd %}im{% endif %}pair"><b>{{ value.label }}</b> : {{ value.value | thesaurus }}</div>
|
<div class="desc{% if loop.index is odd %}im{% endif %}pair"><b>{{ value.label }}</b> : {{ value.value | thesaurus }}</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if app['authentication'].getUser().getPrefs('technical_display') == 'group' %}
|
{% if app['authentication'].getUser().getPrefs('technical_display') == 'group' %}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{% macro format_caption(record, highlight, searchEngine, includeBusiness) %}
|
{% macro format_caption(record, highlight, searchEngine, options, includeBusiness) %}
|
||||||
{% for value in record.get_caption().get_highlight_fields(highlight, null, searchEngine, includeBusiness) %}
|
{% for value in record.get_caption().get_highlight_fields(highlight, null, searchEngine, includeBusiness, options) %}
|
||||||
<div class="desc{% if loop.index is odd %}im{% endif %}pair"><b>{{ value.label }}</b> : {{ value.value | thesaurus }}</div>
|
<div class="desc{% if loop.index is odd %}im{% endif %}pair"><b>{{ value.label }}</b> : {{ value.value | thesaurus }}</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if app['authentication'].getUser().getPrefs('technical_display') == 'group' %}
|
{% if app['authentication'].getUser().getPrefs('technical_display') == 'group' %}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{% macro format_caption(record, highlight, searchEngine, includeBusiness) %}
|
{% macro format_caption(record, highlight, searchEngine, options, includeBusiness) %}
|
||||||
{% for value in record.get_caption().get_highlight_fields(highlight, null, searchEngine, includeBusiness) %}
|
{% for value in record.get_caption().get_highlight_fields(highlight, null, searchEngine, includeBusiness, options) %}
|
||||||
<div><b>{{ value.label }}</b> : {{ value.value }}</div>
|
<div><b>{{ value.label }}</b> : {{ value.value }}</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{% macro format_caption(record, highlight, searchEngine, includeBusiness) %}
|
{% macro format_caption(record, highlight, searchEngine, options, includeBusiness) %}
|
||||||
{% for value in record.get_caption().get_highlight_fields(highlight, null, searchEngine, includeBusiness) %}
|
{% for value in record.get_caption().get_highlight_fields(highlight, null, searchEngine, includeBusiness, options) %}
|
||||||
<div class="desc{% if loop.index is odd %}im{% endif %}pair"><b>{{ value.label }}</b> : {{ value.value | thesaurus }}</div>
|
<div class="desc{% if loop.index is odd %}im{% endif %}pair"><b>{{ value.label }}</b> : {{ value.value | thesaurus }}</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
@@ -83,7 +83,7 @@
|
|||||||
<div class="lightbox_container">
|
<div class="lightbox_container">
|
||||||
{% set business = app['acl'].get(app['authentication'].getUser()).has_right_on_base(first_item.getRecord(app).get_base_id(), 'canmodifrecord') %}
|
{% set business = app['acl'].get(app['authentication'].getUser()).has_right_on_base(first_item.getRecord(app).get_base_id(), 'canmodifrecord') %}
|
||||||
{% if first_item %}
|
{% if first_item %}
|
||||||
{{caption.format_caption(first_item.getRecord(app), '', null, business)}}
|
{{caption.format_caption(first_item.getRecord(app), '', null, null, business)}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -95,7 +95,7 @@
|
|||||||
<div class="lightbox_container">
|
<div class="lightbox_container">
|
||||||
{% if basket_element %}
|
{% if basket_element %}
|
||||||
{% set business = app['acl'].get(app['authentication'].getUser()).has_right_on_base(basket_element.getRecord(app).get_base_id(), 'canmodifrecord') %}
|
{% set business = app['acl'].get(app['authentication'].getUser()).has_right_on_base(basket_element.getRecord(app).get_base_id(), 'canmodifrecord') %}
|
||||||
{{caption.format_caption(basket_element.getRecord(app), '', null, business)}}
|
{{caption.format_caption(basket_element.getRecord(app), '', null, null, business)}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -83,7 +83,7 @@
|
|||||||
<div class="lightbox_container PNB">
|
<div class="lightbox_container PNB">
|
||||||
{% set business = app['acl'].get(app['authentication'].getUser()).has_right_on_base(first_item.getRecord(app).get_base_id(), 'canmodifrecord') %}
|
{% set business = app['acl'].get(app['authentication'].getUser()).has_right_on_base(first_item.getRecord(app).get_base_id(), 'canmodifrecord') %}
|
||||||
{% if first_item %}
|
{% if first_item %}
|
||||||
{{caption.format_caption(first_item.getRecord(app), '', null, business)}}
|
{{caption.format_caption(first_item.getRecord(app), '', null, null, business)}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -98,7 +98,7 @@
|
|||||||
<div class="lightbox_container PNB">
|
<div class="lightbox_container PNB">
|
||||||
{% if basket_element %}
|
{% if basket_element %}
|
||||||
{% set business = app['acl'].get(app['authentication'].getUser()).has_right_on_base(basket_element.getRecord(app).get_base_id(), 'canmodifrecord') %}
|
{% set business = app['acl'].get(app['authentication'].getUser()).has_right_on_base(basket_element.getRecord(app).get_base_id(), 'canmodifrecord') %}
|
||||||
{{caption.format_caption(basket_element.getRecord(app), '', null, business)}}
|
{{caption.format_caption(basket_element.getRecord(app), '', null, null, business)}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -13,9 +13,9 @@
|
|||||||
</div>
|
</div>
|
||||||
{% set business = app['acl'].get(app['authentication'].getUser()).has_right_on_base(record.get_base_id(), 'canmodifrecord') %}
|
{% set business = app['acl'].get(app['authentication'].getUser()).has_right_on_base(record.get_base_id(), 'canmodifrecord') %}
|
||||||
{% if record.is_from_reg() %}
|
{% if record.is_from_reg() %}
|
||||||
{{caption.format_caption(record, '', null, business)}}
|
{{caption.format_caption(record, '', null, null, business)}}
|
||||||
{% else %}
|
{% else %}
|
||||||
{{caption.format_caption(record, highlight, searchEngine, business)}}
|
{{caption.format_caption(record, highlight, searchEngine, searchOptions, business)}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<hr style="margin:10px 0;"/>
|
<hr style="margin:10px 0;"/>
|
||||||
{% include 'common/technical_datas.html.twig' %}
|
{% include 'common/technical_datas.html.twig' %}
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
<div class='desc' style='max-height:{{th_size+70}}px;overflow-y:auto;'>
|
<div class='desc' style='max-height:{{th_size+70}}px;overflow-y:auto;'>
|
||||||
<div class="fixeddesc">
|
<div class="fixeddesc">
|
||||||
{% set business = app['acl'].get(app['authentication'].getUser()).has_right_on_base(record.get_base_id(), 'canmodifrecord') %}
|
{% set business = app['acl'].get(app['authentication'].getUser()).has_right_on_base(record.get_base_id(), 'canmodifrecord') %}
|
||||||
{{caption.format_caption(record, highlight, searchEngine, business)}}
|
{{caption.format_caption(record, highlight, searchEngine, searchOptions, business)}}
|
||||||
{% if app['authentication'].getUser().getPrefs('technical_display') == 'group' %}<hr/>{{record.get_technical_infos|raw}}{% endif %}
|
{% if app['authentication'].getUser().getPrefs('technical_display') == 'group' %}<hr/>{{record.get_technical_infos|raw}}{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -47,8 +47,6 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$options->onCollections($databox->get_collections());
|
$options->onCollections($databox->get_collections());
|
||||||
|
|
||||||
$this->options = $options;
|
$this->options = $options;
|
||||||
|
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function tearDownAfterClass()
|
public static function tearDownAfterClass()
|
||||||
@@ -74,7 +72,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $this->options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
|
|
||||||
$result = $results->getResults()->first();
|
$result = $results->getResults()->first();
|
||||||
@@ -92,7 +90,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $this->options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
|
|
||||||
$result = $results->getResults()->first();
|
$result = $results->getResults()->first();
|
||||||
@@ -120,17 +118,15 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$options = $this->getOptions();
|
$options = $this->getOptions();
|
||||||
$options->setDateFields([$date_field]);
|
$options->setDateFields([$date_field]);
|
||||||
$options->setMinDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-23 01:01:00'));
|
$options->setMinDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-23 01:01:00'));
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
|
|
||||||
$options->setMinDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-20 01:01:00'));
|
$options->setMinDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-20 01:01:00'));
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,17 +187,15 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$options = $this->getOptions();
|
$options = $this->getOptions();
|
||||||
$options->setDateFields([$date_field]);
|
$options->setDateFields([$date_field]);
|
||||||
$options->setMaxDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-20 01:01:00'));
|
$options->setMaxDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-20 01:01:00'));
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
|
|
||||||
$options->setMaxDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-23 01:01:00'));
|
$options->setMaxDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-23 01:01:00'));
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,17 +219,15 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$options->setDateFields([$date_field]);
|
$options->setDateFields([$date_field]);
|
||||||
$options->setMinDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-18 01:01:00'));
|
$options->setMinDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-18 01:01:00'));
|
||||||
$options->setMaxDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-20 01:01:00'));
|
$options->setMaxDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-20 01:01:00'));
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
|
|
||||||
$options->setMaxDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-22 01:01:00'));
|
$options->setMaxDate(\DateTime::createFromFormat('Y-m-d H:i:s', '2012-12-22 01:01:00'));
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -279,7 +271,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->editRecord($query_string, $record);
|
$this->editRecord($query_string, $record);
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $this->options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,7 +286,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $this->options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,7 +305,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $this->options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -345,7 +337,6 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$options = $this->getDefaultOptions();
|
$options = $this->getDefaultOptions();
|
||||||
$options->setStemming(true);
|
$options->setStemming(true);
|
||||||
$options->setLocale($language);
|
$options->setLocale($language);
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
$record = self::$DI['record_2'];
|
$record = self::$DI['record_2'];
|
||||||
$index_string = sprintf(
|
$index_string = sprintf(
|
||||||
@@ -367,7 +358,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex([$language]);
|
$this->updateIndex([$language]);
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -410,13 +401,11 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$field = $this->editRecord($query_string, $record);
|
$field = $this->editRecord($query_string, $record);
|
||||||
$options->setFields([$field]);
|
$options->setFields([$field]);
|
||||||
|
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->addRecord($record);
|
self::$searchEngine->addRecord($record);
|
||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -429,13 +418,12 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
|
|
||||||
$this->editRecord($query_string, $record, true, true);
|
$this->editRecord($query_string, $record, true, true);
|
||||||
$options->allowBusinessFieldsOn([$record->get_collection()]);
|
$options->allowBusinessFieldsOn([$record->get_collection()]);
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->addRecord($record);
|
self::$searchEngine->addRecord($record);
|
||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -450,7 +438,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $this->options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -474,9 +462,8 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
self::$searchEngine->addRecord($record);
|
self::$searchEngine->addRecord($record);
|
||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -494,7 +481,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $this->options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -511,15 +498,14 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $this->options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
|
|
||||||
$options = $this->getDefaultOptions();
|
$options = $this->getDefaultOptions();
|
||||||
$options->setFields([$field]);
|
$options->setFields([$field]);
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -536,8 +522,6 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$options->setStemming(true);
|
$options->setStemming(true);
|
||||||
$options->setLocale($language);
|
$options->setLocale($language);
|
||||||
|
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
$field = $this->editRecord($index_string, $record);
|
$field = $this->editRecord($index_string, $record);
|
||||||
|
|
||||||
self::$searchEngine->addRecord($record);
|
self::$searchEngine->addRecord($record);
|
||||||
@@ -546,14 +530,13 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
|
|
||||||
$options->setFields([$field]);
|
$options->setFields([$field]);
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -587,15 +570,13 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$options = $this->getDefaultOptions();
|
$options = $this->getDefaultOptions();
|
||||||
$options->setSearchType(SearchEngineOptions::RECORD_GROUPING);
|
$options->setSearchType(SearchEngineOptions::RECORD_GROUPING);
|
||||||
|
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
$this->editRecord($query_string, $story);
|
$this->editRecord($query_string, $story);
|
||||||
|
|
||||||
self::$searchEngine->addStory($story);
|
self::$searchEngine->addStory($story);
|
||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -606,8 +587,6 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$options = $this->getDefaultOptions();
|
$options = $this->getDefaultOptions();
|
||||||
$options->setSearchType(SearchEngineOptions::RECORD_GROUPING);
|
$options->setSearchType(SearchEngineOptions::RECORD_GROUPING);
|
||||||
|
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->addStory($story);
|
self::$searchEngine->addStory($story);
|
||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
@@ -618,7 +597,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -635,10 +614,9 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
$options->setStatus([4 => ['on' => [$record->get_databox()->get_sbas_id()]]]);
|
$options->setStatus([4 => ['on' => [$record->get_databox()->get_sbas_id()]]]);
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -650,7 +628,6 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$record->set_binary_status('10000');
|
$record->set_binary_status('10000');
|
||||||
|
|
||||||
$options->setStatus([4 => ['on' => [$record->get_databox()->get_sbas_id()]]]);
|
$options->setStatus([4 => ['on' => [$record->get_databox()->get_sbas_id()]]]);
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
$query_string = 'boomboklot' . $record->get_record_id() . 'statusQueryOnOverOn';
|
$query_string = 'boomboklot' . $record->get_record_id() . 'statusQueryOnOverOn';
|
||||||
$this->editRecord($query_string, $record);
|
$this->editRecord($query_string, $record);
|
||||||
@@ -659,7 +636,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -671,7 +648,6 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$record->set_binary_status('10000');
|
$record->set_binary_status('10000');
|
||||||
|
|
||||||
$options->setStatus([4 => ['off' => [$record->get_databox()->get_sbas_id()]]]);
|
$options->setStatus([4 => ['off' => [$record->get_databox()->get_sbas_id()]]]);
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
$query_string = 'boomboklot' . $record->get_record_id() . 'statusQueryOff';
|
$query_string = 'boomboklot' . $record->get_record_id() . 'statusQueryOff';
|
||||||
$this->editRecord($query_string, $record);
|
$this->editRecord($query_string, $record);
|
||||||
@@ -680,7 +656,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -692,7 +668,6 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$record->set_binary_status('00000');
|
$record->set_binary_status('00000');
|
||||||
|
|
||||||
$options->setStatus([4 => ['off' => [$record->get_databox()->get_sbas_id()]]]);
|
$options->setStatus([4 => ['off' => [$record->get_databox()->get_sbas_id()]]]);
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
$query_string = 'boomboklot' . $record->get_record_id() . 'statusQueryOff';
|
$query_string = 'boomboklot' . $record->get_record_id() . 'statusQueryOff';
|
||||||
$this->editRecord($query_string, $record);
|
$this->editRecord($query_string, $record);
|
||||||
@@ -701,7 +676,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -718,10 +693,9 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
$options->setStatus([4 => ['on' => [$record->get_databox()->get_sbas_id()]]]);
|
$options->setStatus([4 => ['on' => [$record->get_databox()->get_sbas_id()]]]);
|
||||||
self::$searchEngine->setOptions($options);
|
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $options);
|
||||||
$this->assertEquals(0, $results->getTotal());
|
$this->assertEquals(0, $results->getTotal());
|
||||||
|
|
||||||
$record->set_binary_status('10000');
|
$record->set_binary_status('10000');
|
||||||
@@ -730,7 +704,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $this->options);
|
||||||
$this->assertEquals(1, $results->getTotal());
|
$this->assertEquals(1, $results->getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -745,7 +719,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
$this->updateIndex();
|
$this->updateIndex();
|
||||||
|
|
||||||
self::$searchEngine->resetCache();
|
self::$searchEngine->resetCache();
|
||||||
$results = self::$searchEngine->query($query_string, 0, 1);
|
$results = self::$searchEngine->query($query_string, 0, 1, $this->options);
|
||||||
$fields = [];
|
$fields = [];
|
||||||
$foundRecord = $results->getResults()->first();
|
$foundRecord = $results->getResults()->first();
|
||||||
|
|
||||||
@@ -759,7 +733,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetAuthenticatedTestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
$found = false;
|
$found = false;
|
||||||
foreach (self::$searchEngine->excerpt($query_string, $fields, $foundRecord) as $field) {
|
foreach (self::$searchEngine->excerpt($query_string, $fields, $foundRecord, $this->options) as $field) {
|
||||||
if (strpos($field, '[[em]]') !== false && strpos($field, '[[/em]]') !== false) {
|
if (strpos($field, '[[em]]') !== false && strpos($field, '[[/em]]') !== false) {
|
||||||
$found = true;
|
$found = true;
|
||||||
break;
|
break;
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
namespace Alchemy\Tests\Phrasea\SearchEngine;
|
namespace Alchemy\Tests\Phrasea\SearchEngine;
|
||||||
|
|
||||||
use Alchemy\Phrasea\SearchEngine\SphinxSearch\SphinxSearchEngine;
|
use Alchemy\Phrasea\SearchEngine\SphinxSearch\SphinxSearchEngine;
|
||||||
|
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
|
||||||
use Alchemy\Tests\Phrasea\SearchEngine\SearchEngineAbstractTest;
|
use Alchemy\Tests\Phrasea\SearchEngine\SearchEngineAbstractTest;
|
||||||
use Symfony\Component\Process\ExecutableFinder;
|
use Symfony\Component\Process\ExecutableFinder;
|
||||||
use Symfony\Component\Process\Process;
|
use Symfony\Component\Process\Process;
|
||||||
@@ -150,7 +151,7 @@ class SphinxSearchEngineTest extends SearchEngineAbstractTest
|
|||||||
$process->run();
|
$process->run();
|
||||||
usleep(500000);
|
usleep(500000);
|
||||||
|
|
||||||
$suggestions = self::$searchEngine->autocomplete('jean');
|
$suggestions = self::$searchEngine->autocomplete('jean', $this->options);
|
||||||
$this->assertInstanceOf('\\Doctrine\\Common\\Collections\\ArrayCollection', $suggestions);
|
$this->assertInstanceOf('\\Doctrine\\Common\\Collections\\ArrayCollection', $suggestions);
|
||||||
|
|
||||||
$this->assertGreaterThan(2, count($suggestions));
|
$this->assertGreaterThan(2, count($suggestions));
|
||||||
|
Reference in New Issue
Block a user