CoreSeek详细安装教程

    xiaoxiao2021-03-25  111

    CentOS 6.5环境准备

    $ locale LANG=zh_CN.UTF-8 LC_ALL="zh_CN.UTF-8" ##以下为核心项,locale为zh_CN.UTF-8,就可以正常显示和输入中文;locale设置功能由操作系统自身支持,BSD/Linux均可开启;该功能,不是coreseek提供的!!! ##如果不能正常显示中文,则后面的中文测试部分无法正常进行,但不会影响coreseek的实际功能;

    依赖包安装:

    yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel

    安装coreseek开发的mmseg,为coreseek提供中文分词功能

    cd coreseek-4.1-beta cd mmseg-3.2.14 ./bootstrap ./configure --prefix=/usr/local/mmseg3 make && make install 遇到的问题: error: cannot find input file: src/Makefile.in 或者遇到其他类似error错误时... 解决方案: 依次执行下面的命令,我运行'aclocal'时又出现了错误,解决方案请看下文描述 yum -y install libtool //看上方环境准备

    安装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=/usr/local/mysql ##coreseek4.x/sphinx1.x,请将--without-mysql更改为--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 网络搜索

    下面开始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第一列id需为整数 #title、content作为字符串/文本字段,被全文索引,请参考数据库实际字段 sql_attr_uint = from_id #从SQL读取到的值必须为整数,请参考数据库实际字段 sql_attr_uint = link_id #从SQL读取到的值必须为整数,请参考数据库实际字段 sql_attr_uint = add_time #从SQL读取到的值必须为整数,请参考数据库实际字段 } #增量源定义 source delta : main #注意与定义名称的统一性 { sql_query_pre = SET NAMES utf8 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 0 30 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/sphinxclient configure: creating ./config.status config.status: creating Makefile config.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.ini extension=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>'; var_dump($res); var_dump($err); echo '</pre>';
    转载请注明原文地址: https://ju.6miu.com/read-25176.html

    最新回复(0)