分词搜索 sphinx+php+mysql
2024-09-04 19:20:57
sphinx3.1.1的安装与使用
- 下载sphinx3.1.1
- wget http://sphinxsearch.com/files/sphinx-3.1.1-612d99f-linux-amd64.tar.gz
- 解压
- tar zxf sphinx-3.1.1-612d99f-linux-amd64.tar.gz
- 改名 sphinx 并移动到 /usr/local/
- mv sphinx-3.1.1 sphinx
- mv sphinx /usr/local/
- 到sphinx目录下创建 data,log文件夹
- cd /usr/local/sphinx
- mkdir data && mkdir log
- 在/usr/local/sphinx/etc 编写 sphinx.conf 配置文件
- vim /usr/local/sphinx/etc/sphinx.conf
#
# Minimal Sphinx configuration sample (clean, simple, functional)
# source src1
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = root
sql_db = test
sql_port = # optional, default is
sql_query_pre = SET NAMES utf8
sql_query = \
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents sql_attr_uint = group_id
sql_attr_timestamp = date_added
} index test1
{
source = src1
path = /usr/local/sphinx/data/test1
min_word_len =
ngram_len =
ngram_chars = U+..U+2FA1F
} indexer
{
mem_limit = 128M
} searchd
{
listen =
listen = :mysql41
log = /usr/local/sphinx/log/searchd.log
query_log = /usr/local/sphinx/log/query.log
read_timeout =
max_children =
pid_file = /usr/local/sphinx/log/searchd.pid
seamless_rotate =
preopen_indexes =
unlink_old =
binlog_path = /usr/local/sphinx/data/
}- 在test数据库中 运行/usr/local/sphinx/etc目录下的example.sql文件
- 进入mysql
- use test;
- source /usr/local/sphinx/etc/example.sql
- 添加索引
- /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf test1
- /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf test1 --rotate // 重新生成索引命令
- 运行sphinx
- /usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf
/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf --stop //停止sphinx命令
- php操作sphinx
- 复制/usr/local/sphinx/api/ 目录下的 sphinxapi.php
$sphinx = new SphinxClient();
$q = $_GET['key'] ?? 'test'; //搜索关键字
// 3.1已经弃用了setMatchMode!直接写查询语法就可以
// 如果要匹配字符串中任意一个词或字使用如下写法
// '"string1" | "string2" | "string3"' // '@(title,content) string' @括号中的是要搜索的字段 可以写多个或单个 // '^$string$' 表示全部匹配 类似mysql中的 fieldName = 'string'
// 更多用法可以参考正则表达式或者官方文档 // 中文分词扩展建议使用scws,官网安装和使用教程说明很详细,(不过sphinx自带的一元分词已经够用了,一般不需要scws
//http://www.xunsearch.com/scws/
$sql = "";
$host = "127.0.0.1";
$port = 9312;
$index = "test1";
$sphinx->SetServer($host, $port);
$sphinx->SetConnectTimeout(10);
$sphinx->SetArrayResult(true);
$res = $sphinx->Query($q, $index);
print_r($res);运行结果如下:
结束,记得数据库数据改变后需重新生成索引
最新文章
- 用javascript比较快速排序和合并排序的优劣
- 可以编辑R代码的eclipse插件
- 微信开发系列----02:实现POST请求响应
- JSTL&;EL(程序员必看之一)
- WPF之旅(一)- 概述
- [Angular 2] Create a simple search Pipe
- C# WinForm判断Win7下是否是管理员身份运行
- python字符串,列表,字符串,元组,集合的一些方法
- sed 变量替换和Linux的特殊符号大全
- Spring Boot 2.x(十一):AOP实战--打印接口日志
- 容器的注入和container设计的思想——Injection Container 理解
- couldn't locate lint-gradle-api-26.1.2.jar for flutter project
- dos基本指令
- 一天掌握python爬虫
- 解决Address is in use:Windows和Linux通过杀死进程
- 洛谷P3366最小生成树
- [leetcode tree]101. Symmetric Tree
- 页面的缓存设置与meta的作用详细解释
- u3d图片转视频
- Ubuntu 字体设置:使用Windows 字体