Sphinx全文索引

  类似的软件: Lucence

 使用流程:

  1 下载  coreseek  coreseek-3.2.14-win32

  2 使用sphinx为要搜索的数据【数据源-商品】 创建全文索引

      2.1 制作一个配置文件  找到在 coreseek-3.2.14-win32coreseek-3.2.14-win32etccsft_mysql.conf

         复制一个模板 改名 为sphinx.conf

     2.2修改配置文件

#MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/
#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库
#为数据库中的表p40_goods表 为数据源
#源定义
source goods
{
type = mysql

sql_host = localhost
sql_user = root
sql_pass =
sql_db = php40
sql_port = 3306
sql_query_pre = SET NAMES utf8
#主查询:要为哪些数据建索引就使用一条SQL语句把这些数据取出来即可
#要求:第一个字段一定是ID
#现在这个SQL的意思是让SPHINX为所有商品的:goods_name,goods_decs,attr_value这三个字段创建全文索引

sql_query = SELECT a.id,a.goods_name,a.goods_desc,GROUP_CONCAT(b.attr_value) attr_value from p40_goods a LEFT JOIN p39_goods_attr b ON a.id=b.goods_id GROUP BY a.id
}

#一个数据源对应一个index
#定义索引文件
index goods
{
source = goods #对应的source名称
#生成的索引文件存放的目录索引文件的名字, 最后的goods是指文件名叫goods 而不是目录
path = D:serverapachehtdocs p p40coreseek-3.2.14-win32vardatagoods
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0

#中文分词词库文件所在目录
charset_dictpath = D:serverapachehtdocs p p40coreseek-3.2.14-win32etc
charset_type = zh_cn.utf-8
}

#全局index定义
indexer
{
mem_limit = 128M
}

#searchd服务器的配置
searchd
{
listen = 9312
read_timeout = 5
max_children = 30
max_matches = 1000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
#配置一下 以下三个文件存放的绝对目录【目录中不要有中文】
pid_file = D:serverapachehtdocs p p40coreseek-3.2.14-win32var/log/searchd_mysql.pid
log = D:serverapachehtdocs p p40coreseek-3.2.14-win32var/log/searchd_mysql.log
query_log = D:serverapachehtdocs p p40coreseek-3.2.14-win32var/log/query_mysql.log
}

 2.3使用sphinx为商品生成索引  

 使用bin/indexer.exe的命令

   以管理员命令 运行CMD

 D:serverapachehtdocs p p40coreseek-3.2.14-win32inindexer.exe -c  D:serverapachehtdocs p p40coreseek-3.2.14-win32etcsphinx.conf  配置的路径  goods 配置文件中所有名字

  -----------------------------

   安装启动sphinx服务器

           使用bin/searchd.exe

 D:serverapachehtdocs p p40coreseek-3.2.14-win32insearchd.exe -c  D:serverapachehtdocs p p40coreseek-3.2.14-win32etcsphinx.conf   --install 

   安装服务窗口找到SPHINX并启动

    services.msc   启动

  在项目中使用PHP代码查询sphinx

       A 先复制sphinxapi文件到项目中根目录

 

  例子:

//关键字搜索
public function key_search()
{

//搜索关键字
$key=I('get.key');

header('Content-Type:Text/html;charset=utf-8;');
//搜索sphinx
require('./sphinxapi.php');
$sph=new SphinxClient();
$sph->SetServer('localhost',9312);
//第一个参数:要查的关键字
//第二个参数:sphinx中索引的名字默认是*,所有的索引
$ret=$sph->query($key,'goods');
//提取出商品的ID
$ids=array_keys($ret['matches']);
$gModel=D('Goods');
$ret=$gModel->field('id,goods_name')->where(
'id'=>array('in',$ids),
)->select();


}

用法

 1 创建配置文件建索引并启动服务器

 2 把关键词发到sphinx服务器去搜索 会把搜索到的商品ID返回给php

3 php 再使用ID查询数据库取出详细信息

   

世上无难事,只怕有心人......
原文地址:https://www.cnblogs.com/gooderic/p/5816300.html