搜尋
首頁資料庫mysql教程coreeek 和 sphinx 的配置与使用

前言 关于 sphinx 的安装请参考 Sphinx 安装记录. 关于 coreeek 的安装请参考 coreseek 安装记录. sphinx 和 coreeek 安装好后,是可以搜索出满意的结果了,凡是有一个问题:对于新增的数据,我们需要在 sphinx 中重建索引。 又由于旧的数据量是很大的,所以

cover

前言

关于 sphinx 的安装请参考 Sphinx 安装记录.
关于 coreeek 的安装请参考 coreseek 安装记录.

sphinx 和 coreeek 安装好后,是可以搜索出满意的结果了,凡是有一个问题:对于新增的数据,我们需要在 sphinx 中重建索引。
又由于旧的数据量是很大的,所以重建索引是很费时间的,所有如果数据不需要实时同步,那么每天晚上定时重建一下就行了。
如果需要实时同步,比如几分钟内就要搜索生效,那么就需要使用增量索引了。
然后再在晚上闲时合并增量索引和主索引。

关于配置

在 sphinx 中,需要配置两个数据源和两个索引, 一个是主索引,另一个是增量索引,而且增量索引需要继承于主索引。

由于我们的索引会在指定时间合并,所以在下次合并索引之前,我们增量索引需要做的就是重建上次合并索引之后改变或新增的数据。

所有我们需要一个辅助表来记录上次修改的时间,用于增量索引使用。

辅助表 结构很简单,只有一个字段上次合并的时间,而且永远只有一条记录。

CREATE TABLE t_blog_time_sphinx
(
    c_id INTEGER PRIMARY KEY NOT NULL,
    c_time DATETIME NOT NULL
);

关于 sphinx 的配置如下

# 主数据源
source main_source
{
    type            = mysql
    sql_host        = 127.0.0.1  
    sql_user        = test 
    sql_pass        = test
    sql_db          = test 
    sql_port        = 3306
    sql_query_pre= SET NAMES utf8
    sql_query = select c_id,c_title,c_content,c_year,c_month,c_day,c_modifytime,c_createtime FROM t_blog_sphinx;
    sql_attr_uint = c_year
    sql_attr_uint = c_month 
    sql_attr_uint = c_day 
    sql_attr_timestamp  = c_modifytime
    sql_attr_timestamp  = c_createtime
    sql_field_string = c_title
    sql_field_string = c_content
}
# 增量数据源
source main_inc_source : main_source
{
    sql_query_pre = SET NAMES utf8
    sql_query = select c_id,c_title,c_content,c_year,c_month,c_day,c_modifytime,c_createtime FROM t_blog_sphinx where c_modifytime > ( SELECT c_time FROM t_blog_time_sphinx limit 1 );
}
# 主索引
index  main_index 
{
    source          = main_source 
    path            = /usr/local/coreseek4/var/data/main_index
    docinfo         = extern
    charset_type        = zh_cn.utf-8 
    charset_dictpath = /usr/local/mmseg3/etc/  
    ngram_len = 0 
}
# 增量索引
index main_inc_index : main_index
{
    source = main_inc_source
    path = /usr/local/coreseek4/var/data/main_inc_index
}
# 索引程序
indexer
{  
    mem_limit       = 32M
}
# 守护程序
searchd
{  
    listen          = 9312
    listen          = 9306:mysql41
    log         = /usr/local/coreseek4/var/log/searchd.log
    query_log       = /usr/local/coreseek4/var/log/query.lo
    client_timeout= 300
    read_timeout        = 5
    max_children        = 30
    pid_file        = /usr/local/coreseek4/var/log/searchd.pid
    max_matches     = 1000
    seamless_rotate     = 1
    preopen_indexes     = 1
    unlink_old      = 1
    mva_updates_pool= 1M
    max_packet_size= 8M
    max_filters= 256
    max_filter_values= 4096
    max_batch_queries= 32
    workers         = threads # for RT to work
}

启动 sphinx

第一步是辅助表中插入一个时间

INSERT INTO t_blog_time_sphinx (c_time)VALUES(now());

第二步是创建主索引和增量索引

/usr/local/coreseek4/bin/indexer main_index
/usr/local/coreseek4/bin/indexer main_inc_index

第三部是启动守护程序

/usr/local/coreseek4/bin/searchd

定时任务

定时任务需要做的有这么几件事。

  1. 实时重建当天的索引(增量索引)
  2. 晚上合并增量索引到主索引
  3. 更新辅助表的时间为当前时间(一般减去若干分钟,来使数据有几分钟的冗余,避免遗漏数据)
# 增量索引
/usr/local/coreseek4/bin/indexer t_cover_sphinx_inc_index --rotate
# 合并
/usr/local/coreseek4/bin/indexer --merge t_cover_sphinx_index t_cover_sphinx_inc_index --rotate
# 修改辅助表上次的合并时间
update t_blog_time_sphinx set c_time = now() - 10*60;

php 测试程序

在 coreseek 的测试目录下可以找到 sphinxapi.php 文件,复制到你的 php 源代码对应的位置。

关于全文索引字段的组装格式,可以参考 官方文档

//加入 sphinx api
include('api/coreseek_sphinxapi.php');
//初始化 sphinx
$sphinx = new SphinxClient(); 
$sphinx->setServer($ip, $port);
//设置属性字段
if(isset($_GET["year"]) && strlen($_GET["year"]) > 0){
    $sphinx->SetFilter("c_year", array($_GET["year"]));
}
//设置全文检索字段
$query = "";
if(isset($_GET["title"]) && strlen($_GET["title"]) > 0){
    $query .= "|" . trim($_GET["title"]);
}
if(isset($_GET["content"]) && strlen($_GET["content"]) > 0){
   $query .= "|" . trim($_GET["content"]);
}
$query = trim($query);
//开始搜索,索引必须是主索引和增量索引
$res = $sphinx->query($query, 'main_inc_index,main_index');
echo "<p>query = $query </p>";
//输出结果,其中 GetLastError 和 GetLastWarning 用于调试。
echo "<pre class="brush:php;toolbar:false">";  
print_r($sphinx->GetLastError());
print_r($sphinx->GetLastWarning ());
print_r($res); 
echo "
";
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何使用php扩展Sphinx进行全文搜索如何使用php扩展Sphinx进行全文搜索Jul 29, 2023 am 10:05 AM

如何使用PHP扩展Sphinx进行全文搜索全文搜索是现代Web应用程序中的常见需求之一。为了满足用户对数据的高效查询和检索,我们可以使用Sphinx这个功能强大的开源搜索引擎来实现全文搜索功能。Sphinx使用C++编写,提供了PHP的扩展,方便我们在PHP项目中使用。本文将介绍如何使用PHP扩展Sphinx进行全文搜索

如何在Nginx配置Cookie安全策略如何在Nginx配置Cookie安全策略Jun 10, 2023 pm 12:54 PM

随着互联网的不断发展和普及,Web应用程序已成为人们日常生活中必不可少的一部分,这也决定了Web应用程序的安全问题非常重要。在Web应用程序中,Cookie被广泛使用来实现用户身份认证等功能,然而Cookie也存在着安全风险,因此在配置Nginx时,必须设定适当的Cookie安全策略,以保证Cookie的安全性。下面是一些在Nginx中配置Cookie安全策

MySQL连接池的最大连接数如何设置?MySQL连接池的最大连接数如何设置?Jun 30, 2023 pm 12:55 PM

如何配置MySQL连接池的最大连接数?MySQL是一个开源的关系型数据库管理系统,被广泛应用于各种领域的数据存储与管理。在使用MySQL时,我们常常需要使用连接池来管理数据库连接,以提高性能和资源利用率。连接池是一种维护和管理数据库连接的技术,它能够在需要时提供数据库连接,并在不需要时回收连接,从而减少了连接的重复创建和销毁。而连接池的最大连接数则是连接池所

Nginx错误页面配置,优雅处理网站故障Nginx错误页面配置,优雅处理网站故障Jul 04, 2023 pm 04:06 PM

Nginx错误页面配置,优雅处理网站故障在现代互联网时代,一个高度稳定和可靠的网站是任何企业或个人追求的目标。然而,由于各种原因,网站可能会经历故障或错误,这可能是由于网络问题、服务器问题或应用程序错误等。为了提供更好的用户体验和优雅地处理任何可能发生的错误,Nginx作为一个强大的Web服务器软件,不仅能够提供高性能的服务,还能够灵活地配置错误页面。在Ng

如何通过宝塔面板进行UFW防火墙的配置如何通过宝塔面板进行UFW防火墙的配置Jun 21, 2023 am 09:08 AM

在Linux服务器上配置防火墙非常重要,它可以有效地保护服务器免受恶意攻击。在Ubuntu操作系统上,我们可以使用UFW防火墙来保护服务器的安全。在本文中,我们将介绍如何使用宝塔面板配置UFW防火墙。第一步:安装宝塔面板首先,我们需要在Ubuntu上安装宝塔面板。您可以在宝塔官网免费下载宝塔面板的安装包,然后在命令行中运行以下命令来安装宝塔面板:$wget

如何使用Linux进行虚拟网络配置如何使用Linux进行虚拟网络配置Jun 18, 2023 am 11:24 AM

随着云计算、大数据和物联网等技术的日益普及,虚拟化技术成为了当今IT领域的热门话题。虚拟化是通过将一台物理主机划分为多个独立的虚拟机,实现资源的共享和管理的方法。虚拟网络是虚拟化的其中一个重要组成部分,能够满足不同应用之间的网络隔离和互动需求。在本文中,我们将介绍如何使用Linux进行虚拟网络配置。一、Linux虚拟网络的概述在物理网络中,网卡是连接网络设备

Sphinx 实现全文搜索的 PHP 应用指南Sphinx 实现全文搜索的 PHP 应用指南Oct 03, 2023 am 08:37 AM

Sphinx实现全文搜索的PHP应用指南引言:在现代的Web应用中,全文搜索功能已经成为了一个必备的特性。因为用户常常会通过输入关键词来搜索和匹配他们所需要的内容。为了提供高效和准确的搜索结果,我们需要一个强大的搜索引擎。而Sphinx作为一个开源的全文搜索引擎,它为PHP提供了一个完美的搜索解决方案。本文将介绍如何使用Sphinx实现

Intel TXT的安装和配置步骤Intel TXT的安装和配置步骤Jun 11, 2023 pm 06:49 PM

IntelTXT(TrustedExecutionTechnology,可信执行技术)是一种硬件帮助保护系统安全的技术。它通过使用硬件测量模块(TPM)来确保系统启动过程中的完整性,并且可以防止恶意软件攻击。在本文中,我们将讨论IntelTXT的安装和配置步骤,帮助你更好地保护你的系统安全。第一步:检查硬件要求安装IntelTXT前,需要先检查计算

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)