实现方法:
- 安装sphinx软件
首先需要安装sphinx全文搜索工具,官网下载地址:http://sphinxsearch.com/downloads/release/。安装完成后,启动sphinx服务。
- 准备数据源
将需要搜索的数据源导入sphinx。数据源可以是一个或多个在数据源配置文件中定义的mysql表。使用Sphinx工具的索引员(Sphinx indexer)将数据源导入Sphinx搜索服务并生成一个或多个索引文件。
- 配置sphinx
在sphinx的配置文件中,定义数据源和索引文件,以及查询时的搜索方式和策略。示例配置文件:
source my_search
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass =
sql_db = test
sql_port =
sql_query_pre = SET NAMES utf8
sql_query = \\
SELECT id, title, content, created_time, updated_time \\
FROM my_post_table
sql_attr_uint = author_id
sql_attr_timestamp = created_time
}
index my_index
{
source = my_search
path = /usr/local/var/data/my_index
docinfo = extern
charset_type = utf-8
}
searchd
{
listen = 9312
log = /usr/local/var/log/searchd.log
query_log = /usr/local/var/log/query.log
read_timeout = 5
max_children = 30
pid_file = /usr/local/var/run/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
}
- 使用PHP调用sphinx
在PHP中,引入sphinx扩展库,在代码中实现查询逻辑。示例代码:
<?php
(function() {
// 初始化sphinx客户端
$sphinx = new \SphinxClient();
$sphinx->SetServer('localhost', 9312);
$sphinx->SetConnectTimeout(1);
$sphinx->SetArrayResult(true);
$sphinx->SetMatchMode(SPH_MATCH_EXTENDED);
$sphinx->SetSortMode(SPH_SORT_RELEVANCE);
$sphinx->SetRankingMode(SPH_RANK_PROXIMITY_BM25);
// 搜索查询
$result = $sphinx->Query('keyword', 'my_index');
// 检查数据
if ($result === false) {
echo '搜索失败';
return;
}
// 处理结果数据
$matches = $result['matches'];
if (empty($matches)) {
echo '搜索无结果';
return;
}
// 输出结果
foreach ($matches as $match) {
echo $match['id'] . ' ' . $match['attrs']['created_time'] . ' ' . $match['attrs']['author_id'] . '<br>';
}
})();
示例说明:
假设有一个名为“my_post_table”的mysql表格,其中包含文章的id、title、content、created_time、updated_time等字段。在配置sphinx后,使用以下命令生成索引文件:
$ indexer --config sphinx.conf --all
然后使用以上PHP代码,即可实现对文章信息的全文搜索。
另一个示例说明可以是:在搜索时指定查询结果条数(limit)和偏移量(offset),以及使用Sphinx的facet功能实现对查询结果进行分组。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php启用sphinx全文搜索的实现方法 - Python技术站