Sphinx以及coreseek的安装及使用

检索结构
php  ->  sphinx  -> mysql
非结构化数据又叫全文数据,非固定长度字段例如文章标题搜索这类适用sphinx

全文数据搜索:
1 顺序扫描 : 如like查找
2 索引扫描 : 把非结构化数据中的内容提取出来一部分重新组织,这部分数据就叫做索引

全文检索分为两个过程
1.创建索引
2.搜索索引

创建索引:
sphinx通过语言处理组件会把搜索语句中的标点符号,语气助词给过滤掉,然后处理完毕后会
分析出一些词语,传给索引组件,然后排序去除重复词语.

搜索索引:
搜索关键字 提交 -> sphinx 分析出文档ID -> mysql通过ID查询数据并返回

中文分词需要coreseek
coreseek 支持中文的全文检索引擎

sphinx的安装
下载源码包 进行源码安装
./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql
make && make install

sphinx 中重要的三个命令(bin目录下)
Indexer 创建索引命令
Searchd 启动进程命令
Search 命令行搜索命令

配置sphinx
cd /usr/local/sphinx/etc
cp sphinx.conf.dist sphinx.conf
vi sphinx.conf

配置文件
名为main的主数据源:source main{}
继承名为main的增量数据源:source delta:main{}
名为main的主索引:index main{}
继承名为main的增量索引:index delta:main{}
分布式索引:index dist1{}
索引器:indexer{}
服务进程:searchd{}

修改配置文件中主数据源的mysql配置,测试环境的数据源名为main,假设mysql中test有张表叫post
source main
{
    # data source type. mandatory, no default value
    # known types are mysql, pgsql, mssql, xmlpipe, xmlpipe2, odbc
    type                    = mysql

    #####################################################################
    ## SQL settings (for ‘mysql‘ and ‘pgsql‘ types)
    #####################################################################

    # some straightforward parameters for SQL source types
    sql_host                = localhost
    sql_user                = root
    sql_pass                = admin
    sql_db                = test
    sql_port                = 3306    # optional, default is 3306

    sql_sock                = /tmp/mysqld.sock  #如果是linux下需要开启,指定sock文件

    sql_query_pre            = SET NAMES utf8
    sql_query_pre            = SET SESSION query_cache_type=OFF #关闭缓存

    # main document fetch query
    # mandatory, integer document ID field MUST be the first selected column
    sql_query                = \                              #获取数据的sql语句
        SELECT id,title,content FROM post

    #sql_attr_uint            = group_id                  #对排序字段进行注释

    #sql_attr_timestamp        = date_added            #对排序字段进行注释

    sql_query_info        = SELECT * FROM post WHERE id=$id

}
注释掉所有增量数据源,修改主索引

index main
{
        source                  = main

        # index files path and file name, without extension
        # mandatory, path must be writable, extensions will be auto-appended
        path                    = /usr/local/sphinx/var/data/main

        docinfo                 = extern
        mlock                   = 0
        morphology              = none
        # default is 1 (index everything)
        min_word_len            = 1

        # charset encoding type
        # optional, default is ‘sbcs‘
        # known types are ‘sbcs‘ (Single Byte CharSet) and ‘utf-8‘
        charset_type            = utf-8
        # ‘utf-8‘ default value is
        # charset_table          = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F

}

注释掉所有的增量索引和分布式索引

配置完成后,创建索引
命令 indexer
-c 指定配置文件
--all 对所有索引重新编制索引
--rotate 用于轮换索引,主要是在不停止服务的时候,增加索引
--merge 合并索引
/usr/local/sphinx/sbin/indexer -c
/usr/local/sphinx/etc/sphinx --all
如果报错./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
解决方式:cp /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18

测试
建立索引
[[email protected] bin]# ./indexer --all
Sphinx 0.9.9-release (r2117)
Copyright (c) 2001-2009, Andrew Aksyonoff

using config file ‘/usr/local/sphinx/etc/sphinx.conf‘...
indexing index ‘main‘...
collected 2 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 2 docs, 47 bytes
total 0.033 sec, 1414 bytes/sec, 60.21 docs/sec
total 1 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 5 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg

搜索
[[email protected] bin]# ./search linux1
Sphinx 0.9.9-release (r2117)
Copyright (c) 2001-2009, Andrew Aksyonoff

using config file ‘/usr/local/sphinx/etc/sphinx.conf‘...
index ‘main‘: query ‘linux1 ‘: returned 1 matches of 1 total in 0.000 sec

displaying matches:
1. document=1, weight=1
    id=1
    title=linux1
    content=salflsdkjsdglds

words:
1. ‘linux1‘: 1 documents, 1 hits

sphinx相当于把数据库数据索引静态化到本地 来加快查询速度 避免消耗数据库,给数据库给降压,当数据更新的时候,需要重新indexer --all 或者用 indexer main重建所有索引 才会搜出新的数据

安装CORESEEKcoreseek里有2个文件夹 一个是mmseg中文分词包 还有一个是csft(其实就是sphinx)包 都要安装

首先安装mmseg中文分词
./configure --prefix=/usr/local/mmseg
编译时可能会报错config.status: error: cannot find input file: src/Makefile.in
通过automake来解决
首先检查是否安装了libtool如果没有
yum -y install libtool
automake
如果automake报错 原因可能是下列
Libtool library used but `LIBTOOL‘ is undefined
The usual way to define `LIBTOOL‘ is to add `AC_PROG_LIBTOOL‘
to `configure.ac‘ and run `aclocal‘ and `autoconf‘ again.
If `AC_PROG_LIBTOOL‘ is in `configure.ac‘, make sure
its definition is in aclocal‘s search path.

原因分析
aclocal是个扫描程序, 负责扫描configure.ac中所有的宏定义并展开,
上面产生的原因就是找不到LIBTOOL宏的定义之处造成的.原因就是aclocal与libtool没有安装在一个相同目录下面aclocal是去默认 安装目录 /usr/share/aclocal下面搜索所有的.m4文件找所定义的宏,但是由于安装了多个aclocal,可能aclocal目录不存在,实际目录为/usr/share/aclocal1.10等,
这就造成了aclocal找不到m4文件的情况, 解决办法就是将文件夹aclocal1.10重命名为aclocal.或者显示指定路径 aclocal -I /usr/share/aclocal1.10 -I /usr/share/libtool/m4 --install 或者把/usr/share/libtool/m4下面的文件都copy至/usr/share/aclocal1.10中.
本人的机器上是/usr/share/下有2个文件夹 一个是aclocal,一个是aclocal-1.11,首先将aclocal的所有文件拷贝到aclocal-1.11下
cp -R /user/share/aclocal/* /usr/share/aclocal-1.11/

然后重新运行aclocal和autoconf
aclocal && autoconf
最后再次运行automake
automake

然后继续mmseg的安装
./configure --prefix=/usr/local/mmseg
make && make install

如果make 报错
There is an easy fix when you get such messages as "X--tag=CXX: command not found".
Just type:
export echo=echo
And try again.

所以输入
export echo=echo
然后再次运行安装
make && make install

安装csft
./configure --prefix=/usr/local/coreseek --with-mysql=/usr/local/mysql --with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/
make && make install
安装完毕后 注意 coreseek 中的配置文件也是csft.conf 而不是 sphinx.conf
cd /usr/local/coreseek/etc
cp sphinx.conf.dist csft.conf
vim csft.conf 

有些配置改动如下其他配置内容如上文的sphinx.conf
在索引源中注释掉txt
index main{
  #stopwords = G:\data\stopwords.txt
  #wordforms =G:\data\wordforms.txt
  #exceptions =/data/exceptions.txt
  #charset_type = sbcs
  #添加下面2行 意思是把中文分词加入到配置文件中
  char_type = zh_cn.utf-8
  charset_dictpath =/usr/local/mmseg/etc/  #你安装mmseg的目录
}

保存配置
建立索引
cd /usr/local/coreseek/bin
./indexer --all
./search 中文词缀

如何用php去使用sphinx
Sphinx集成到php程序中有两种方式
1.Sphinx php 模块(这次我们选择使用的方式)
2.Sphinx api 类(位于coreseek源码包里的csft里的api文件夹里有一个sphinxapi.php,使用的时候包含这个php文件即可)

我们要使用sphinx需要做以下几件事:
1.首先要有数据
2.建立sphinx配置文件
3.生成索引
4,启动searchd 服务进程,并开启端口9312
5.用php客户程序去链接sphinx服务

/usr/local/coreseek/bin/searchd
启动进程命令 searchd
-c 指定配置文件
--stop 停止服务
--pidfile 显示指定pid文件
-p 指定端口(默认9312)
注意:这里启动的服务是searchd

使用php  sphinx的模块
下载 sphinx-1.1.0.tgz

tar zvxf sphinx-1.1.0.tgz
cd sphinx-1.1.0
/usr/local/php/bin/phpize  #用于生成一个configure的脚本
进入coreseek源码包的csft/api/libsphinxclent 目录下执行configure
./configure
make && make install
进入sphinx-1.1.0.gzt的源码包目录下 执行configure用于生成so 的shpinx模块
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-sphinx
make && make install
安装成功后会有提示
Build complete.
Don‘t forget to run ‘make test‘.

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/    (这个目录是sphinx.so所在的目录)

然后我们编辑php的ini文件 在extension中加入
extension=sphinx.so

然后重启nginx和php的服务
最后打印一下phpinfo 查看sphinx是否开启成功
如果成功开启 就可以使用php手册里的sphinx的方法和代码了
时间: 2024-10-18 10:21:01

Sphinx以及coreseek的安装及使用的相关文章

coreseek的安装及使用

检索结构 php -> sphinx -> mysql 非结构化数据又叫全文数据,非固定长度字段例如文章标题搜索这类适用sphinx 全文数据搜索: 顺序扫描 : 如like查找 索引扫描 : 把非结构化数据中的内容提取出来一部分重新组织,这部分数据就叫做索引 全文检索分为两个过程 1.创建索引 2.搜索索引 创建索引: sphinx通过语言处理组件会把搜索语句中的标点符号,语气助词给过滤掉,然后处理完毕后会 分析出一些词语,传给索引组件,然后排序去除重复词语. 搜索索引: 搜索关键字 提交

【coreseek】安装配置

安装sphinx相关服务. 参考:http://blog.csdn.net/e421083458/article/details/21529969 http://www.coreseek.cn/products-install/install_on_bsd_linux/ 安装sphinx相关服务. 参考:http://blog.csdn.net/e421083458/article/details/21529969 http://www.coreseek.cn/products-install/

Sphinx在windows下安装使用(支持中文全文检索)

前段时间听同事谈起过,公司内部的一个搜索功能用的就是Sphinx,但一直没时间去整一下,今天刚好有点时间,那么就折腾一次吧.一般在linux上比较多,今天就在windows下安装于调试一下吧. 前言: 一.关于Sphinx Sphinx 是一个在GPLv2 下发布的一个全文检索引擎,商业授权(例如, 嵌入到其他程序中)需要联系作者(Sphinxsearch.com)以获得商业授权.一般而言,Sphinx是一个独立的搜索引擎,意图为其他应用提供高速.低空间占用.高结果相关度的全文搜索功能.Sphi

coreseek环境安装 、mysql数据源、sphinx扩展安装及php调用

一.安装m4-1.4.13.autoconf-2.64.automake-1.11.libtool-2.2.6 下载安装m4-1.4.13.autoconf-2.64.automake-1.11.libtool-2.2.6,coreseek安装搭好安装环境. 1 m4-1.4.13下载地址: http://mirrors.kernel.org/gnu/m4/m4-1.4.13.tar.gz 2 $ tar -xzvf m4-1.4.13.tar.gz 3 $ cd m4-1.4.13 4 $ .

安装sphinx和coreseek

sphinx简介 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.Sphinx可以非常容易的与SQL数据库和脚本语言集成.当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据. Sphinx的特性如下: a)  高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒); b)  高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响

Centos下Sphinx中文分词编译安装测试---CoreSeek

要支持中文分词,还需要下载Coreseek,可以去官方搜索下载,这里我用的4.1 百度云下载地址:      https://pan.baidu.com/s/1slNIyHf tar -zxvf coreseek-4.1-beta.tar.gz cd coreseek-4.1-beta cd mmseg-3.2.14/ ./bootstrap   //测试安装环境 libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `config'

PHP实现关键词全文搜索Sphinx及中文分词Coreseek的安装配置

一.需求 实现文章标题中或分类(甚至文章内容)包含搜索词的文章,按照搜索词出现的频率的权重展示. 二.环境 Nginx+PHP+Mysql(系统Centos7). 三.安装 1.安装依赖 yum -y install make gcc gcc-c++ libtool autoconf automake imake mariadb mariadb-server mariadb-devel libxml2-devel expat-devel 2.下载软件包 git clone https://git

Sphinx 之 Coreseek、Sphinx-for-chinaese、Sphinx+Scws 评测

Sphinx是一个基于SQL的全文检索引擎:普遍使用于很多网站:但由于中英文的差异,其本身,对中文的支持并不好.主要体现在对一段话断词:英文只需按照空格对其分词即可:但对于博大精深的中文来说,却是件困难的事情. 分词在两个地方会用到:1.索引时,根据分词索引原始数据2.搜索时,对用户输入分词,到索引中查询 本文提供了三种目前最常用的方案Coreseek.Sphinx-for-chinaese.Sphinx+Scws,并对其简单对比:在合适的场景,选择合适的方案,得出最优的解. 评测:一.Core

sphinx与coreseek

Sphinx 1 下载sphinx  http://sphinxsearch.com/ 2 编译安装 tar -zxvf sphinx.tar.gz ./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql make && make install Sphinx中重要的三个命令,(Sphinx安装的bin目录下) Indexer 创建索引命令.Searchd 启动进程命令.Search 命令行搜索命令. 3 准