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 修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#
# 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 使用搜索方式试一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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 @   TOPHP  阅读(123)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示