linux配置sphinx
1. 配置索引
cd /usr/local/sphinx/etc/
cp sphinx.conf.dist sphinx.conf //备份配置文件,防止改错
vim sphinx.conf
配置文件结构: # 主数据源,(main名字可更改)
source main{
type = mysql #数据库类型
sql_host = localhost #MySQL主机IP
sql_user = test #MySQL用户名
sql_pass = #MySQL密码
sql_db = test #MySQL数据库
sql_port = 3306 #MySQL端口
sql_sock = /tmp/mysql.sock #Linux下需要开启,指定sock文件
sql_query_pre = SET NAMES utf8 #MySQL检索编码
sql_query_pre = SET SESSION query_cache_type=OFF #关闭缓存
sql_query = \ #获取数据的SQL语句
SELECT id, title, content FROM post # 以下是用来过滤或条件查询的属性,这里列出的字段将可以进行条件查询,同时不参与全文检索
#sql_attr_uint = group_id
#sql_attr_timestamp = date_added
} # 增量数据源(inherited source), 继承主数据源
source src1throttled : main{ } # 主索引(local index),(main名字可更改)
index main{
source = main # 指定主数据源
path = /usr/local/sphinx/var/data/main # 索引路径
} # 增量索引(inherited index)
index test1stemmed : test1{ } # 分布式索引(distributed index)
index dist1{ } # 实时索引(realtime index)
index rt{ } # 索引器设置,(调整最小内存到最佳)
indexer{
mem_limit = 256M #内存大小限制,默认128M,推荐256M
#其它用默认即可
} # 服务进程设置,(监听端口号)
searched{
#全部默认即可,默认端口号就是9312
} # 公共配置
common{ }
2. 创建索引
创建索引命令:indexer
-c 指定配置文件
--all 对所有索引重新编制索引
--rotate 用于轮换索引,在不停止服务的时候(searchd运行时)增加索引;searchd运行时不加会报错。
--merge 合并索引,增量索引合并到主索引的时候用
生成全部索引: /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf --all
或指定索引(例如main): /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf main
(1)如果这里出现报错:
【ERROR: index 'main': sql_connect: Can't connect to local MySQL server through socket '/tmp/mysql.sock'】
没找到/tmp/mysql.sock, 通过find / -name mysql.sock -print查找到位置,在配置sphinx.conf里更改正确。
如:mysql_sock = /var/lib/mysql/mysql.sock 保存退出。
(2)继续创建索引,警告:
【WARNING: Attribute count is 0: switching to none docinfo】
改sphinx.conf里的docinfo = none就没有警告了。(http://sphinxsearch.com/docs/current.html#conf-docinfo)
创建索引出现如下提示,表示生成成功:
3. 启动Sphinx
重建索引:./searchd -c /usr/local/sphinx/etc/sphinx.conf
轮换索引: ./searchd -c /usr/local/sphinx/etc/sphinx.conf goods_list --rotate
./searchd -c /usr/local/sphinx/etc/sphinx.conf store_list --rotate
停止服务:./searchd -c /usr/local/sphinx/etc/sphinx.conf --stop
4. 使用sphinx
在web根目录下建立一个search目录(当然不在根目录也行,同样目录名也可以随取),复制E:\coreseek\api\ sphinxapi.php文件到search目录(sphinxapi.php这个是sphinx官方提供的api),开始php程序的编写。
在search目录建立一个文件,名字叫啥都行,我管它叫index.php,其内容如下
<?php
include 'sphinxapi.php'; // 加载Sphinx API
$sc = new SphinxClient(); // 实例化Api
$sc->setServer('localhost', 9312); // 设置服务端,第一个参数sphinx服务器地址,第二个sphinx监听端口
$res = $sc->query('sphinx', 'mysql'); // 执行查询,第一个参数查询的关键字,第二个查询的索引名称,mysql索引名称(这个也是在配置文件中定义的),多个索引名称以,分开,也可以用*表示所有索引。
print_r($res);
打印结果
Array
(
………省略………
[matches] => Array
(
[2] => Array
(
[weight] => 2
[attrs] => Array
(
[addtime] => 1282622004
)
)
[4] => Array
(
[weight] => 2
[attrs] => Array
(
[addtime] => 1282622079
)
)
)
………省略………
)
Matches中就是查询的结果了,但是仿佛不是我们想要的数据,比如titile,content字段的内容就没有查询出来,根据官方的说明是Sphinx并没有连接到MySQL去取数据,只是根据它自己的索引内容进行计算,因此如果想用Sphinx提供的API去取得我们想要的数据,还必须以查询的结果为依据,再次查询MySQL从而得到我们想要的数据。
查询结果中键值分别表示
2唯一主键
weight权重
attrs sql_attr_*中配置
至此,搜索引擎算是完成一大半了,剩下的大家可以自行完成。
比如:
<?php
$ids = array_keys($res['matches']); // 获取主键
$ids = join(',', $ids);
$query = mysql_query("SELECT * FROM post WHERE id IN ({$ids})");
while($row = mysql_fetch_assoc($query)) {
.....
}
linux配置sphinx的更多相关文章
- linux 配置 sphinx 全文搜索引擎
因为公司网站需要,最近在弄sphinx搜索引擎,也是遇到各种问题,最终终于解决了. 服务器系统:centos7 (64位) 详情看安装官网的安装教程进行 coreseek 3.2.14 这里只提一些注 ...
- linux配置网卡IP地址命令详细介绍及一些常用网络配置命令
linux配置网卡IP地址命令详细介绍及一些常用网络配置命令2010-- 个评论 收藏 我要投稿 Linux命令行下配置IP地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置 ...
- linux配置java环境变量(详细)
linux配置java环境变量(详细) 本文完全引用自: http://www.cnblogs.com/samcn/archive/2011/03/16/1986248.html 一. 解压安装jdk ...
- linux配置hosts
linux配置hosts linux下配置hosts和windows下其实就是一样的,找到文件在哪里就好 sudo vim /etc/hosts
- linux配置java环境变量
linux配置java环境变量(详细) 一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令 ./jdk-6u14-linux-i586. ...
- Linux 配置本地yum源
Linux 配置无网络状态利用yum安装软件 在有网络的情况下安装软件只需一条yum install xxx命令,例如安装gcc只需一条指令:yum install gcc 那么在没有网络的情况下该 ...
- Linux配置支持高并发TCP连接(socket最大连接数)
Linux配置支持高并发TCP连接(socket最大连接数) Linux配置支持高并发TCP连接(socket最大连接数)及优化内核参数 2011-08-09 15:20:58| 分类:LNMP&a ...
- Linux配置完iptables后,重启失效的解决方案
Linux配置完iptables后,重启失效的解决方案 因为只有root用户才可访问1024以下的端口,非root用户登陆是不能启用80端口的.web service 往往启动1024以上的端口,并通 ...
- linux配置java环境变量(转)
linux配置java环境变量(详细) 一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令 ./jdk-6u14-linux-i586. ...
随机推荐
- Ubuntu 14.10 下编译Hadoop2.4.0
在http://www.aboutyun.com/thread-8130-1-1.html 这里看到到,安装过程遇到了上面说的问题,所以将此文转载过来,以备不时之需,感谢此作者. 问题导读: 1.如果 ...
- QT中实现应用程序的单例化
一介绍 通过编写一个QSingleApplication类,来实现Qt程序的单例化,原文的作者是在Windows Vista + Qt4.4 下实现的,不过应用在其他平台上是没问题的.(本文是我在ht ...
- autoconf配置的项目,编译debug版本
./configure CFLAGS=" -g " 当然,c++代码就把 CFALGS 改成 CPPFLAGS
- python3学习笔记二(注释、缩进)
注释 单行注释,用#开头即可 多行注释,用''' ''' 或""" """ 缩进 python不能像其他语言一样采用{}或者begin... ...
- [转]VB 读写ini 配置文件
转自 百度知道 C# 读写 ini配置文件 点此链接 'API 声明Public Declare Function GetPrivateProfileString Lib "kernel32 ...
- 【转载】这样去写你的HTML
昨天在 twitter 上说,怎么忍心把页面写得这么难用?是的,这个世界还有一群人等着我们创建出来的东西,可以让他们的生活能过得更容易呢.比如那些需要读屏软件的用户.作为一个前端,我们又怎么会忍心呢. ...
- openstack处理booting from hard disk
当你的实例启动出现如下报错的处理方式: 需要编辑/etc/nova/nova.conf [libvirt] cpu_mode = none virt_type=qemu 修改后需要 ...
- SkipList理解
记下自己对跳表SkipList的理解. SkipList采用空间换时间的思想,通过增加数据间的链接,达到加快查找速度的目的. 数据库LevelDB和RocksDB中用到了SkipList,Redis中 ...
- android scrollview listview显示不全
原来处理方法是重写ListView import android.content.Context; import android.util.AttributeSet; import android.v ...
- ViewPager系列之 仿魅族应用的广告BannerView
转自:https://juejin.im/post/5933c65d0ce463005717cbe9 前言 Banner广告位是APP 中的一个非常重要的位置,为什么呢?因为它能带来money.是一个 ...