search
HomeDatabaseMysql Tutorialcoreeek 和 sphinx 的配置与使用
coreeek 和 sphinx 的配置与使用Jun 07, 2016 pm 04:41 PM
sphinxuseaboutPrefaceConfiguration

前言 关于 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 "
";
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact 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虚拟网络的概述在物理网络中,网卡是连接网络设备

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

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

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

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

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),