<?php
// +-------------------------------------------------+
// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
// +-------------------------------------------------+
// $Id: search_engine_client.interface.php,v 1.1 2026/07/15 10:10:54 rtigero Exp $

if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");

/**
 * Contrat d'un client de moteur de recherche (Sphinx / Manticore).
 *
 * Reprend l'interface historique de SphinxClient (telle qu'utilisee par les
 * searchers) afin que l'implementation soit interchangeable. Les deux moteurs
 * parlant SphinxQL, une seule implementation (sphinxql_client) couvre Sphinx 3
 * et Manticore ; seule la chaine de connexion change selon le moteur actif.
 */
interface search_engine_client
{
    /**
     * Ouvre (ou reutilise) la connexion au moteur.
     * @return bool
     */
    public function Open();

    /**
     * @return bool
     */
    public function Close();

    /**
     * Definit la chaine de connexion a utiliser (host:port,flag,user,pass).
     * Permet a la factory d'injecter la connexion du moteur actif.
     * @param string $connect_string
     * @return void
     */
    public function set_connect_string($connect_string);

    /**
     * @param bool $arrayresult
     * @return void
     */
    public function SetArrayResult($arrayresult);

    /**
     * @param int $mode
     * @return void
     */
    public function SetMatchMode($mode);

    /**
     * @param int $mode
     * @param string $sortby
     * @return void
     */
    public function SetSortMode($mode, $sortby = '');

    /**
     * @param int $ranker
     * @param string $rankexpr
     * @return void
     */
    public function SetRankingMode($ranker, $rankexpr = '');

    /**
     * @param string $select
     * @return void
     */
    public function SetSelect($select);

    /**
     * @param array $weights
     * @return void
     */
    public function SetFieldWeights($weights);

    /**
     * @param int $offset
     * @param int $limit
     * @param int $max
     * @param int $cutoff
     * @return void
     */
    public function SetLimits($offset, $limit, $max = 0, $cutoff = 0);

    /**
     * @return void
     */
    public function ResetFilters();

    /**
     * @param string $attribute
     * @param array $values
     * @param bool $exclude
     * @return void
     */
    public function SetFilter($attribute, $values, $exclude = false);

    /**
     * @param string $attribute
     * @param int $min
     * @param int $max
     * @param bool $exclude
     * @return void
     */
    public function SetFilterRange($attribute, $min, $max, $exclude = false);

    /**
     * @param string $attribute
     * @param int $func
     * @param string $groupsort
     * @return void
     */
    public function SetGroupBy($attribute, $func, $groupsort = '@group desc');

    /**
     * Execute une recherche et retourne un resultat au format SphinxClient.
     * @param string $query
     * @param string $index
     * @param string $comment
     * @return array|false
     */
    public function Query($query, $index = '*', $comment = '');
}
