Cómo utilizar coreseek en thinkphp
#Definición de fuente
Fuente lemai
{
tipo = mysql
sql_host = localhost
sql_user = root
sql_pass = 123
sql_ db = lemai
sql_port = 3306
sql_query_pre = ESTABLECER NOMBRES utf8
sql_query = SELECCIONAR id, título, contenido, nombre DE la tienda
#sql_query El id de la primera columna debe ser un número entero
#título, contenido como cadena/ Los campos de texto están indexados de texto completo
sql_attr_uint = sid #El valor leído de SQL debe ser un número entero
sql_attr_timestamp = time #El valor leído de SQL debe ser un número entero como una hora atributo
sql_query_info_pre = SET NAMES utf8 #Establece el juego de caracteres correcto al realizar consultas desde la línea de comando
sql_query_info = SELECT * FROM shop WHERE name=$id #Desde la base de datos al consultar información desde la línea de comando Leer datos sin procesar
}
#Definición del índice
Índice lemai
{
fuente = lemai #Nombre de la fuente correspondiente
ruta = var/data/mysql #Cambie a la ruta absoluta real, por ejemplo, /usr/local/coreseek/var/...
docinfo = externo
mlock = 0
morfología = ninguna
min_word_len = 1
html_strip = 0
#Configuración de segmentación de palabras chinas, para más detalles, consulte: /products-install/coreseek_mmseg/
#charset_dictpath = /usr/local/mmseg3/etc/ #BSD, configuración del entorno Linux, que termina en / símbolo p>
charset_dictpath = C:/AppServ/www/ thinkphp/ThinkPHP/Extend/Vendor/Coreseek/etc/ #Entorno Windows, que termina con el símbolo /, lo mejor es dar una ruta absoluta, como C:/usr /local/mmseg3/etc/#BSD, configuración del entorno Linux, que termina en el símbolo /.
Por ejemplo: C:/usr/local/coreseek/etc/...
charset_type = zh_cn.utf-8
#charset_table =
ngram_len = 0
}
# Definición de índice global
indexador
{
mem_ limit = 128M
}
#definición del servicio searchd
searchd
{
listen = 9312
read_timeout = 5
max_children = 30
max _matches = 1000
Seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
pid_file = var/log/searchd_mysql.pid # Cámbielo a la ruta absoluta del archivo que realmente usa. Ruta absoluta, como /usr/local/coreseek/var/...
log = var/log/searchd_mysql.log #Conviértala en una ruta absoluta, como: /usr/local/coreseek/ var/ ...
query_log = var/log/query_mysql.log #Cambie a la ruta absoluta real utilizada, como /usr/local/coreseek/var/...
}
Luego copie coreseek y colóquelo debajo del archivo principal Extend/Vendor de thinkphp.
Abra cmd cd para coreseek
bin\indexer -c etc\csft_mysql.conf (mysql, etc.) nombre de la base de datos para crear el índice
Después de crear el índice, podemos ver un montón de archivos en var\data, lo que significa que el índice se creó correctamente
bin \searchd -c etc\csft_mysql.conf --la consola inicia el proceso
(verifique el puerto 9312 ¿Existe tal proceso? Si es así, no hay problema)
Consulta de línea de comando
|iconv -f gbk -t utf-8 | búsqueda -c etc. \csft_mysql.conf - -stdin | iconv -f utf-8 -t gbk Consulta de índice chino
Luego conecte sphinxapi con PHP en el controlador para realizar pruebas
Vendor('Coreseek.api .sphinxapi') ;
//El nombre del archivo para cargar paquetes de extensión de terceros no contiene clases
$db = new PDO('mysql:host=localhost;port= 3306;dbname=lemai' , 'root', '123', array(PDO::MYSQL_ATTR_INIT_ COMMAND =gt; 'SET NAMES UTF8'));
//Crear una instancia de PDO
$spx = new SphinxClient ();
//Crear una instancia de SphinxClient
$spx -gt;'127.0 .0.1', 9312);
$spx-gt;SetConnectTimeout(3);
$spx-gt;SetArrayResult(verdadero);
$spx-gt; ;
$resultado = $spx -gt; consulta('1', '*');
$ids = join(",", array_keys($resultado['coincidencias) ']));
$sql = "SELECCIONAR * DE la tienda donde está el id ( {$ids})"
$stmt = $db-gt;
$r = $stmt-gt; FETCHALL(PDO::FETCH_ASSOC);
echo "lt;pregt;";
var_dump($ r);
A continuación se muestra mi código de muestra, incluida la paginación Sphinx
clase IndexAction extends Action {
public function index(){
encabezado("Contenido -tipo: texto/ clase
$db = M();
$spx = new SphinxClient();
//Crear una instancia Cliente Esfinge
$spx -gt; SetServer('127.0.0.1', 9312
//Establecer IP y puerto
$spx-gt; /p>
//Establecer tiempo de espera
$spx-gt;SetArrayResult (true);
if(strlen($keyword)gt;=18){< p> p>
$spx -gt; SetMatchMode(SPH_MATCH_ALL); //Si el carácter de consulta del usuario coincide >=18, hay una palabra de consulta
}else{
$ spx -gt; SetMatchMode(SPH_MATCH_ANY); //Coincide con cualquiera de las palabras de consulta
$spx -gt; cualquiera de las palabras de consulta
}
//------
$limit = 12 //número a mostrar por página
$page = $_GET['page']gt;$_GET['page'] :
//Si el valor GET no es 1, el recuento es 1
// $spx-gt; setLimits(0, 12);
$apagado = ($página-1)*$límite
$spx-gt; SetLimits( $off, $ limit);
// Establecer paginación
$resultado = $spx -gt; query("{$keyword}",'*');
/*
* Tome la identificación coincidente y forme una cadena
*/
$str = '';
foreach($resultado['matches'] as $rrs){
$str.=$rrs['id'].,';
}
$ids = rtrim($str,',');
//Operación base de datos
$sql = " SELECT * FROM tienda donde id in ({$ids})";
$stmt = $db-gt; query($sql);
$opts = array( p>
"before_match"=gt; "lt; span style='color:red'gt;", //agregar estilo
"after_match"=gt; "lt;/spangt;"
);
foreach($stmt como $st){
$shop_all[] = $spx-gt; buildExcerpts($st,'lemai') ,$palabra clave,$ opciones);
}
$num = $ resultado['número total'];
> $count = ceil($resultado['total']/12); //averigüe el número total de búsquedas de Sphinx para obtener el número de páginas para esa palabra clave
$pagenum = $_GET[' página']gt; $_GET['página']: 1;
$this-gt; asignar('pagenum', $pagenum); ;assign('num',$num);
$this-gt;assign('count',$count);
$this-gt;assign('shop_all' , $shop_all);
$this-gt; asignar('palabra clave', $palabra clave
$this-gt;
}
}