# API PHP des domaines de recherche

# Recherche sur un domaine

Le filtre Anakeen\Fullsearch\FilterMatch est un opérateur de filtre. Il permet d'ajouter un filtre lié à un domaine de recherche.

$s = new \Anakeen\Search\SearchElements();

$filter = new \Anakeen\Fullsearch\FilterMatch("MyDomain", $pattern);
$s->setSlice(10);
$s->addFilter($filter);
$results = $s->search()->getResults();

# Ordonnancement par pertinence

Le calcul de l'ordonnancement est faite à l'aide des poids indiqués.

Le filtre Anakeen\Fullsearch\FilterMatch fourni la méthode getRandOrder() permettant de définir l'ordre par pertinence.

$s = new \Anakeen\Search\SearchElements();

$filter = new \Anakeen\Fullsearch\FilterMatch("MyDomain", $pattern);
$s->setSlice(10);
$s->addFilter($filter);
$s->setOrder($filter->getRankOrder());
$results = $s->search()->getResults();

# Mise en évidence des termes trouvés

La classe Anakeen\Fullsearch\FilterHighlight permet d'avoir la terme recherché mis en évidence dans les données indexées. Le constructeur prend en entrée l'identifiant de domaine de recherche.

Les méthodes setStartSel() et setStopSel() permette de modifier les caractères encadrant les termes à mettre en évidences (par défaut double accolades {{ ... }}).

$s = new \Anakeen\Search\SearchElements();

$filter = new \Anakeen\Fullsearch\FilterMatch("MyDomain", $pattern);
$s->setSlice(10);
$s->addFilter($filter);
$s->setOrder($filter->getRankOrder());
$results = $s->search()->getResults();
$names = [];

$c = 1;

$h = new \Anakeen\Fullsearch\FilterHighlight("MyDomain");
$h->setStartSel("\x1b[30;42m");
$h->setStopSel("\x1b[0m");
foreach ($results as $smartElement) {
  printf("%02d) %s\n", $c++, $smartElement->getTitle());

  $light = $h->highlight($smartElement->id, $pattern);
  print "\t$light";
  print "\n=======\n";
}

# Indexation des données de recherches

# Indexation d'un domaine

Le mise à jour des données pour un domaine est faite par la méthode Anakeen\Fullsearch\SearchDomain::updateIndexSearchData(). Elle ne prend en compte que les Smart Element modifié depuis la dernière indexation.

Une callback peut être fournie. Elle est appelée avant chaque mise à jour d'une indexation. Elle prend en paramètre le Smart Element courant.

$domain = new \Anakeen\Fullsearch\SearchDomain("MyDomain");
$domain->updateIndexSearchData(function (\Anakeen\SmartElement $se) {
  printf("%s\n", $se->getTitle());
});

# Indexation d'un Smart Element

La méthode Anakeen\Fullsearch\SearchDomainManager::updateSmartElementSearchData() réalise l'indexation des données de recherche d'un Smart Element pour tous les domaines enregistrés.

$se = \Anakeen\Core\SEManager::getDocument($id);
\Anakeen\Fullsearch\SearchDomainManager::updateSmartElementSearchData($se);

# Gestion des domaines de recherches

# Reset des données de recherche

La méthode \Anakeen\Fullsearch\SearchDomain::reindexSearchData() supprime toutes les données de recherche du domaine. Elle réalise ensuite une réindexation complète des données?

$domain = new \Anakeen\Fullsearch\SearchDomain("MyDomain");
$domain->reindexSearchData(function (\Anakeen\SmartElement $se) {
  printf("%s\n", $se->getTitle());
});