search
HomeBackend DevelopmentPHP Tutorial筹建coreseek(sphinx+mmseg3)详细安装配置+php之sphinx扩展安装+php调用示例

搭建coreseek(sphinx+mmseg3)详细安装配置+php之sphinx扩展安装+php调用示例
一个文档包含了安装、增量备份、扩展、api调用示例,省去了查找大量文章的时间。

搭建coreseek(sphinx+mmseg3)安装


[第一步] 先安装mmseg3

cd /var/installwget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gztar zxvf coreseek-4.1-beta.tar.gzcd coreseek-4.1-betacd mmseg-3.2.14./bootstrap./configure --prefix=/usr/local/mmseg3make && make install遇到的问题:error: cannot find input file: src/Makefile.in或者遇到其他类似error错误时...解决方案:依次执行下面的命令,我运行'aclocal'时又出现了错误,解决方案请看下文描述yum -y install libtoolaclocallibtoolize --forceautomake --add-missingautoconfautoheadermake clean

安装好'libtool'继续从'aclocal'开始执行上面提到的一串命令,执行完后再运行最开始的安装流程即可。

[第二步] 安装coreseek

##安装coreseek$ cd csft-3.2.14 或者 cd csft-4.0.1 或者 cd csft-4.1$ sh buildconf.sh                                         #输出的warning信息可以忽略,如果出现error则需要解决$ ./configure --prefix=/usr/local/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql##如果提示mysql问题,可以查看MySQL数据源安装说明   http://www.coreseek.cn/product_install/install_on_bsd_linux/#mysql$ make && make install$ cd ..##命令行测试mmseg分词,coreseek搜索(需要预先设置好字符集为zh_CN.UTF-8,确保正确显示中文)$ cd testpack$ cat var/test/test.xml    #此时应该正确显示中文$ /usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml$ /usr/local/coreseek/bin/indexer -c etc/csft.conf --all$ /usr/local/coreseek/bin/search -c etc/csft.conf 网络搜索


出现这个 xmlpipe2 support NOT compiled in. To use xmlpipe2, install missing XML libra  错误

执行以下命令:
yum -y install expat expat-devel

依次安装后,从新编译coreseek,然后再生成索引,就可以通过了。

结果如下:

Coreseek Fulltext 4.1 [ Sphinx 2.0.2-dev (r2922)]  Copyright (c) 2007-2011,  Beijing Choice Software Technologies Inc (http://www.coreseek.com)   using config file 'etc/csft.conf'...  index 'xml': query '网络搜索 ': returned 1 matches of 1 total in 0.000 sec   displaying matches:  1. document=1, weight=1590, published=Thu Apr  1 07:20:07 2010, author_id=1   words:  1. '网络': 1 documents, 1 hits  2. '搜索': 2 documents, 5 hits  


下面开始sphinx与mysql的配置


创建sphinx统计表,在coreseek_test库中执行。

CREATE TABLE sph_counter(    counter_id INTEGER PRIMARY KEY NOT NULL,    max_doc_id INTEGER NOT NULL);

创建配置sphinx与mysql的配置文件

# vi /usr/local/coreseek/etc/csft_mysql.conf

#MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库#源定义source main                                                #定义源名称{    type                    = mysql    sql_host                = localhost    sql_user                = root    sql_pass                = 123456    sql_db                  = coreseek_test    sql_port                = 3306    sql_query_pre           = SET NAMES utf8                sql_query_pre           = REPLACE INTO sph_counter SELECT 1,MAX(id) FROM hr_spider_company;                                        # 更新sph_counter    sql_query               = SELECT * FROM hr_spider_company WHERE id( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )    # 根据sph_counter纪录ID读入数据    sql_query_post_index    = REPLACE INTO sph_counter SELECT 1,MAX(id) FROM hr_spider_company                                        # 更新sph_counter}#index定义index main                                                #注意与定义名称的统一性{    source              = main                                          #对应的source名称    path                = /usr/local/coreseek/var/data/mysql            #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...    docinfo             = extern    mlock               = 0    morphology          = none    min_word_len        = 1    html_strip          = 0    #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/    charset_dictpath    = /usr/local/mmseg3/etc/                         #BSD、Linux环境下设置,/符号结尾    charset_type        = zh_cn.utf-8}index delta : main                                        #注意与定义名称的统一性{    source              = delta    path                = /usr/local/coreseek/var/data/delta}#全局index定义indexer{    mem_limit            = 128M}#searchd服务定义searchd{    listen              = 9312    read_timeout        = 5    max_children        = 30    max_matches         = 1000    seamless_rotate     = 0    preopen_indexes     = 0    unlink_old          = 1    pid_file            = /usr/local/coreseek/var/log/searchd_mysql.pid   #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...    log                 = /usr/local/coreseek/var/log/searchd_mysql.log   #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...    query_log           = /usr/local/coreseek/var/log/query_mysql.log     #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...    binlog_path         =                                                 #关闭binlog日志}


我的测试表名为hr_spider_company,你只需要根据实际需求更改为自己的表名即可。

调用命令列表:

启动后台服务(必须开启)
# /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf

执行索引(查询、测试前必须执行一次)
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate

执行增量索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf delta --rotate

合并索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --merge main delta --rotate --merge-dst-range deleted 0 0

(为了防止多个关键字指向同一个文档加上--merge-dst-range deleted 0 0)

后台服务测试
# /usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/csft_mysql.conf  aaa

关闭后台服务
# /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf --stop

自动化命令:

crontab -e

*/1 * * * * /bin/sh /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf delta --rotate*/5 * * * * /bin/sh /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --merge main delta --rotate --merge-dst-range deleted 0 030 1 * * *  /bin/sh /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate

以下任务计划的意思是:每隔一分钟执行一遍增量索引,每五分钟执行一遍合并索引,每天1:30执行整体索引。

Sphinx扩展安装安装


Coreseek官方教程中建议php使用直接include一个php文件进行操作,事实上php有独立的sphinx模块可以直接操作coreseek(coreseek就是sphinx!)已经进入了php的官方函数库,而且效率的提升不是一点点!但php模块依赖于libsphinxclient包。

[第一步] 安装依赖libsphinxclient

# cd /var/install/coreseek-4.1-beta/csft-4.1/api/libsphinxclient/# ./configure  --prefix=/usr/local/sphinxclientconfigure: creating ./config.statusconfig.status: creating Makefileconfig.status: error: cannot find input file: Makefile.in   #报错configure失败    //处理configure报错编译过程中报了一个config.status: error: cannot find input file: src/Makefile.in这个的错误,然后运行下列指令再次编译就能通过了:# aclocal# libtoolize --force# automake --add-missing# autoconf# autoheader# make clean//从新configure编译# ./configure# make && make install

[第二步] 安装sphinx的PHP扩展

http://pecl.php.net/package/sphinx# wget http://pecl.php.net/get/sphinx-1.3.0.tgz# tar zxvf sphinx-1.3.0.tgz# cd sphinx-1.3.0# phpize# ./configure --with-php-config=/usr/bin/php-config --with-sphinx=/usr/local/sphinxclient# make && make install# cd /etc/php.d/# cp gd.ini  sphinx.ini# vi sphinx.iniextension=sphinx.so# service php-fpm restart

打开phpinfo看一下是否已经支持了sphinx模块。

php调用sphinx示例:


<?php $s = new SphinxClient;    $s->setServer("127.0.0.1", 9312);    $s->setMatchMode(SPH_MATCH_PHRASE);    $s->setMaxQueryTime(30);    $res = $s->query("宝马",'main'); #[宝马]关键字,[main]数据源source    $err = $s->GetLastError();    var_dump(array_keys($res['matches']));    echo "<br>"."通过获取的ID来读取数据库中的值即可。"."<br>";        echo '<pre class="brush:php;toolbar:false">';    var_dump($res);    var_dump($err);    echo '
';

输出结果:

array(20) {  [0]=>  int(1513)  [1]=>  int(42020)  [2]=>  int(57512)  [3]=>  int(59852)  [4]=>  int(59855)  [5]=>  int(60805)  [6]=>  int(94444)  [7]=>  int(94448)  [8]=>  int(99229)  [9]=>  int(107524)  [10]=>  int(111918)  [11]=>  int(148)  [12]=>  int(178)  [13]=>  int(595)  [14]=>  int(775)  [15]=>  int(860)  [16]=>  int(938)  [17]=>  int(1048)  [18]=>  int(1395)  [19]=>  int(1657)}<br>通过获取的ID来读取数据库中的值即可。<br><pre class="brush:php;toolbar:false">array(10) {  ["error"]=>  string(0) ""  ["warning"]=>  string(0) ""  ["status"]=>  int(0)  ["fields"]=>  array(17) {    [0]=>    string(3) "cid"    [1]=>    string(8) "link_url"    [2]=>    string(12) "company_name"    [3]=>    string(9) "type_name"    [4]=>    string(10) "trade_name"    [5]=>    string(5) "scale"    [6]=>    string(8) "homepage"    [7]=>    string(7) "address"    [8]=>    string(9) "city_name"    [9]=>    string(8) "postcode"    [10]=>    string(7) "contact"    [11]=>    string(9) "telephone"    [12]=>    string(6) "mobile"    [13]=>    string(3) "fax"    [14]=>    string(5) "email"    [15]=>    string(11) "description"    [16]=>    string(11) "update_time"  }  ["attrs"]=>  array(3) {    ["from_id"]=>    string(1) "1"    ["link_id"]=>    string(1) "1"    ["add_time"]=>    string(1) "1"  }  ["matches"]=>  array(20) {    [1513]=>    array(2) {      ["weight"]=>      int(2)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(7) "3171471"        ["add_time"]=>        string(10) "1394853454"      }    }    [42020]=>    array(2) {      ["weight"]=>      int(2)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(7) "2248093"        ["add_time"]=>        string(10) "1394913884"      }    }    [57512]=>    array(2) {      ["weight"]=>      int(2)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(7) "2684470"        ["add_time"]=>        string(10) "1394970833"      }    }    [59852]=>    array(2) {      ["weight"]=>      int(2)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "3"        ["link_id"]=>        string(1) "0"        ["add_time"]=>        string(10) "1394977527"      }    }    [59855]=>    array(2) {      ["weight"]=>      int(2)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "3"        ["link_id"]=>        string(1) "0"        ["add_time"]=>        string(10) "1394977535"      }    }    [60805]=>    array(2) {      ["weight"]=>      int(2)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "3"        ["link_id"]=>        string(1) "0"        ["add_time"]=>        string(10) "1394980072"      }    }    [94444]=>    array(2) {      ["weight"]=>      int(2)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "3"        ["link_id"]=>        string(1) "0"        ["add_time"]=>        string(10) "1395084115"      }    }    [94448]=>    array(2) {      ["weight"]=>      int(2)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "3"        ["link_id"]=>        string(1) "0"        ["add_time"]=>        string(10) "1395084124"      }    }    [99229]=>    array(2) {      ["weight"]=>      int(2)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(7) "1297992"        ["add_time"]=>        string(10) "1395100520"      }    }    [107524]=>    array(2) {      ["weight"]=>      int(2)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "5"        ["link_id"]=>        string(10) "4294967295"        ["add_time"]=>        string(10) "1395122053"      }    }    [111918]=>    array(2) {      ["weight"]=>      int(2)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "5"        ["link_id"]=>        string(10) "4294967295"        ["add_time"]=>        string(10) "1395127953"      }    }    [148]=>    array(2) {      ["weight"]=>      int(1)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(7) "2770294"        ["add_time"]=>        string(10) "1394852562"      }    }    [178]=>    array(2) {      ["weight"]=>      int(1)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(7) "2474558"        ["add_time"]=>        string(10) "1394852579"      }    }    [595]=>    array(2) {      ["weight"]=>      int(1)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(6) "534804"        ["add_time"]=>        string(10) "1394852862"      }    }    [775]=>    array(2) {      ["weight"]=>      int(1)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(7) "3230353"        ["add_time"]=>        string(10) "1394852980"      }    }    [860]=>    array(2) {      ["weight"]=>      int(1)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(7) "2549233"        ["add_time"]=>        string(10) "1394853048"      }    }    [938]=>    array(2) {      ["weight"]=>      int(1)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(7) "3191382"        ["add_time"]=>        string(10) "1394853114"      }    }    [1048]=>    array(2) {      ["weight"]=>      int(1)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(7) "3234645"        ["add_time"]=>        string(10) "1394853174"      }    }    [1395]=>    array(2) {      ["weight"]=>      int(1)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(7) "2661219"        ["add_time"]=>        string(10) "1394853375"      }    }    [1657]=>    array(2) {      ["weight"]=>      int(1)      ["attrs"]=>      array(3) {        ["from_id"]=>        string(1) "2"        ["link_id"]=>        string(7) "2670624"        ["add_time"]=>        string(10) "1394853540"      }    }  }  ["total"]=>  int(543)  ["total_found"]=>  int(543)  ["time"]=>  float(0.109)  ["words"]=>  array(1) {    ["宝马"]=>    array(2) {      ["docs"]=>      int(543)      ["hits"]=>      int(741)    }  }}string(0) ""


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
使用java的String.valueOf()函数将基本数据类型转换为字符串使用java的String.valueOf()函数将基本数据类型转换为字符串Jul 24, 2023 pm 07:55 PM

使用Java的String.valueOf()函数将基本数据类型转换为字符串在Java开发中,当我们需要将基本数据类型转换为字符串时,一种常见的方法是使用String类的valueOf()函数。这个函数可以接受基本数据类型的参数,并返回对应的字符串表示。在本文中,我们将探讨如何使用String.valueOf()函数进行基本数据类型转换,并提供一些代码示例来

怎么把char数组转string怎么把char数组转stringJun 09, 2023 am 10:04 AM

char数组转string的方法:可以通过赋值来实现,使用{char a[]=" abc d\0efg ";string s=a;}语法,让char数组对string直接赋值,执行代码即可完成转换。

2w字 详解 String,yyds2w字 详解 String,yydsAug 24, 2023 pm 03:56 PM

大家好,今天给大家分享java基础知识之String。String类的重要性就不必说了,可以说是我们后端开发用的最多的类,所以,很有必要好好来聊聊它。

使用java的String.replace()函数替换字符串中的字符(串)使用java的String.replace()函数替换字符串中的字符(串)Jul 25, 2023 pm 05:16 PM

使用Java的String.replace()函数替换字符串中的字符(串)在Java中,字符串是不可变的对象,这意味着一旦创建了一个字符串对象,就无法修改它的值。但是,你可能会遇到需要替换字符串中的某些字符或者字符串的情况。这时候,我们可以使用Java的String类中的replace()方法来实现字符串的替换。String类的replace()方法有两种重

使用java的String.length()函数获取字符串的长度使用java的String.length()函数获取字符串的长度Jul 25, 2023 am 09:09 AM

使用Java的String.length()函数获取字符串的长度在Java编程中,字符串是一种非常常见的数据类型,我们经常需要获取字符串的长度,即字符串中字符的个数。在Java中,我们可以使用String类的length()函数来获取字符串的长度。下面是一个简单的示例代码:publicclassStringLengthExample{publ

Java String中的split方法如何使用Java String中的split方法如何使用May 02, 2023 am 09:37 AM

String中split方法使用String的split()方法用于按传入的字符或字符串对String进行拆分,返回拆分之后的数组。1、一般用法用一般的字符,例如@或,等符号做分隔符时:Stringaddress="上海@上海市@闵行区@吴中路";String[]splitAddr=address.split("@");System.out.println(splitAddr[0]+splitAddr[1]+splitAddr[2]+splitAddr[3

java的String类如何使用java的String类如何使用Apr 19, 2023 pm 01:19 PM

一、认识String1.JDK中的String首先我们看看JDK中的String类源码,它实现了很多接口,可以看到String类被final修饰了,这就说明String类不可以被继承,String不存在子类,这样所有使用JDK的人,用到的String类都是同一个,如果String允许被继承,每个人都可以对String进行扩展,每个人使用的String都不是同一个版本,两个不同的人使用相同的方法,表现出不同的结果,这就导致代码没办法进行开发了继承和方法覆写在带来灵活性的同时,也会带来很多子类行为不

Golang函数的byte、rune和string类型转换技巧Golang函数的byte、rune和string类型转换技巧May 17, 2023 am 08:21 AM

在Golang编程中,byte、rune和string类型是非常基础、常见的数据类型。它们在处理字符串、文件流等数据操作时发挥着重要作用。而在进行这些数据操作时,我们通常需要对它们进行相互的转换,这就需要掌握一些转换技巧。本文将介绍Golang函数的byte、rune和string类型转换技巧,旨在帮助读者更好地理解这些数据类型,并能够熟练地在编程实践中应用

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools