Red de conocimiento informático - Material del sitio web - Cómo utilizar coreseek en thinkphp

Cómo utilizar coreseek en thinkphp

Primero descargue coreseek, asígnele el nombre coreseek, luego busque csft_mysql.conf en coreseek/etc y modifique el archivo de configuración.

#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

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>

$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(

"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;

}

}