Windows 使用Sphinx 配合Mysql搜索

Sphinx特性:

  • 高速的建立索引(在当代CPU上,峰值性能可达到10MB/秒);
  • 高性能的搜索(在2–4GB的文本数据上,平均每次检索响应时间小于0.1秒);
  • 可处理海量数据(目前已知可以处理超过100GB的文本数据,在单一CPU的系统上可处理100M文档);
  • 提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法;
  • 支持分布式搜索;
  • 提供文件的摘录生成;
  • 3
  • 可作为MySQL的存储引擎提供搜索服务;
  • 支持布尔、短语、词语相似度等多种检索模式;
  • 文档支持多个全文检索字段(最大不超过32个);
  • 文档支持多个额外的属性信息(例如:分组信息,时间戳等);
  • 停止词查询;
  • 支持单一字节编码和UTF-8编码;
  • 原生的MySQL支持(同时支持MyISAM和InnoDB);
  • 原生的PostgreSQL支持.

简单的理解:

先对数据源建立索引。采用分词技术,形成一个索引表。当查询某个单词的时候,先到sphinx建立的索引去查找,然后再去数据库用id查找。

1.直接在http://www.sphinxsearch.com/downloads.html找到最新的windows版本:

我是安装在 D:\sphinx;

2 在sphinx文件夹data里面新建存放数据得文件  我这里和数据库保持了一致:

D:\sphinx\data\jkadmin

新建log文件夹用于存放搜索日志D:\sphinx\data\log

3 在etc目录下找到sphinx-min.conf.dist 重名为sphinx.conf,将配置文件移动到bin目录下,方便操作。

4 修改配置文件

#
# Minimal Sphinx configuration sample (clean, simple, functional)
#

source doc
{
    type            = mysql

    sql_host        = localhost    
    sql_user        = root
    sql_pass        = admin789
    sql_db          = jkadmin
    sql_port        = 3306  # optional, default is 3306
    sql_query_pre   = SET NAMES utf8
    sql_query       = \
        SELECT id, UNIX_TIMESTAMP(create_time) AS date_added, sku, name \
        FROM jk_product
    sql_attr_uint   = date_added
}


index jkadmin
{
    source          = doc
    path            = D:/sphinx/data/jkadmin
}


index jkadminrt
{
    type            = rt
    rt_mem_limit    = 128M

    path            = D:/sphinx/data/jkadminrt

    rt_field        = sku
    rt_field        = name
    rt_attr_uint    = id
}


indexer
{
    mem_limit       = 128M
}


searchd
{
    listen          = 9312
    listen          = 9306:mysql41
    log             = D:/sphinx/data/log/searchd.log
    query_log       = D:/sphinx/data/log/query.log
    read_timeout    = 5
    max_children    = 30
    pid_file        = D:/sphinx/data/log/searchd.pid
    seamless_rotate = 1
    preopen_indexes = 1
    unlink_old      = 1
    workers         = threads # for RT to work
    binlog_path     = D:/sphinx/data/jkadmin
}

5 然后打开终端,切换到sphinx/bin目录下

然后到data目录查看可以看到

启动sphinx服务:

 

6 使用搜索方式试一下

<?php

require "sphinxapi.php";

$client = new SphinxClient();
$query = "BM00FIXED049";
$host = "127.0.0.1";
$port = 9312;
$index = 'jkadmin';
$client->SetServer($host,$port);
$client->SetConnectTimeout(60);
$client->SetArrayResult(true);
$res = $client->Query($query,$index);
print_r($res['matches']);j 

 输出结果:Array ( [0] => Array ( [id] => 3393 [weight] => 13653 [attrs] => Array ( [date_added] => 0 ) ) )

结果中id 和数据库得ID结果是匹配的。

 

补充一下:以上不支持中文搜索

可以在索引增加以下配置:

index jkadmin
{
      source = doc
   path = D:/sphinx/data/jkadmin
   ngram_len = 1
   ngram_chars = U+3000..U+2FA1F
}

 

posted @ 2023-06-13 16:06  TOPHP  阅读(118)  评论(1编辑  收藏  举报