zoukankan      html  css  js  c++  java
  • 安装sphinx

    安装Sphinx全文检索服务器

    Sphinx默认不支持中文索引及检索, 以前用Coreseek的补丁来解决,目前Coreseek 不单独提供补丁文件,而基于sphinx开发了Coreseek 全文检索服务器,Coreseek应该是现在用的最多的sphinx中文全文检索,它提供了为Sphinx设计的中文分词包LibMMSeg包含mmseg中文分词,其实coreseek-3.2.14.tar.gz中已经包含了sphinx,前面安装SphinxSE时也可以使用这个压缩包里的mysqlse。

    我们来看一下的安装过程:

    安装autoconf

    tar zxvf autoconf-2.64.tar.gz

    cd autoconf-2.64

    ./configure --prefix=/usr

    make

    make install

    cd ..

    安装Coreseek

    tar zxvf coreseek-3.2.14.tar.gz

    cd coreseek-3.2.14

    cd mmseg-3.2.14/

    ./bootstrap

    ./configure --prefix=/usr/local/mmseg3

    make

    make install

    cd ../csft-3.2.14/

    sh buildconf.sh

    ./configure --prefix=/usr/local/coreseek --without-python --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql --host=arm

    make

    make install

    cd /usr/local/coreseek/etc

    进入配置目录通过命令ls可以看到3个文件

    example.sql  sphinx.conf.dist  sphinx-min.conf.dist

    其中example.sql是示例sql脚本我们将其导入到数据库中的test数据库中作为测试数据(会创建两张表 documents和tags)

    vi sphinx.conf

    输入以下内容

    source src1

    {

    type = mysql

    sql_host = localhost

    sql_user = root

    sql_pass =12345678

    sql_db = test

    sql_port = 3306 # optional, default is 3306

    sql_sock                              = /tmp/mysql.sock

    sql_query_pre = SET NAMES utf8

    sql_query =

    SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content

    FROM documents

    sql_attr_uint = group_id

    sql_attr_timestamp = date_added

    sql_query_info = SELECT * FROM documents WHERE id=$id

    }

    index test1

    {

    source = src1

    path = /usr/local/coreseek/var/data/test1

    docinfo = extern

    charset_type = zh_cn.utf-8

    mlock = 0

    morphology = none

    min_word_len = 1

    html_strip = 0

    charset_dictpath = /usr/local/mmseg3/etc/

    ngram_len                    = 0

    }

    indexer

    {

    mem_limit = 32M

    }

    searchd

    {

    port = 9312

    log = /usr/local/coreseek/var/log/searchd.log

    query_log = /usr/local/coreseek/var/log/query.log

    read_timeout = 5

    max_children = 30

    pid_file = /usr/local/coreseek/var/log/searchd.pid

    max_matches = 1000

    seamless_rotate = 1

    preopen_indexes = 0

    unlink_old = 1

    }

    说明:

    代码段source src1{***} 代表数据源里面主要包含了数据库的配置信息,src1表示数据源名字,可以随便写。

    代码段index test1{***} 代表为哪个数据源创建索引,与source *** 是成对出现的,其中的source参数的值必须是某一个数据源的名字。

    其他参数可以查看手册,这里不再赘述。

    生成索引

    /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf --all

    #测试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/indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory 

    发现sphinx indexer依赖库ibmysqlclient.so.18找不到,通过编辑此文件来修复这个错误 /etc/ld.so.conf
    vi /etc/ld.so.conf
    将下面这句加到文件到尾部,并保存文件
    /usr/local/mysql/lib
    然后运行下面这个命令即可

    ldconfig

      在使用Sphinx服务时,检查到错误返回,类似: “failed to send client protocol version”.

          什么原因,Google了一下,找到下面的web:

          sphinxsearch returns “failed to send client protocol version” 

          提问者的疑难得到解决,原因是sphinx服务未正常启动.

          可是,在我的使用中,sphinx服务是确实启动了的.那么可能就是客户端使用服务不正常了.因此先检查了服务进程,然后检查配置文件.找到原因所在,客户端代码中指定的服务端口与配置文件中的不一

    其中参数--all表示生成所有索引

    当然也可以是索引的名字例如:/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf test1

    执行后可以在/usr/local/coreseek/var/data目录中看到多出一些文件,是以索引名为文件名的不同的扩展名的文件

    在不启动sphinx的情况下即可测试命令:

      /usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/sphinx.conf number

    可以看到将内容中含有number数据的数据查询出来。

    过滤查询

    /usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/sphinx.conf number --filter group_id 2

    限定group_id 为2 返回一条记录

    同样也可以测试中文(需将命令行终端编码调整为utf-8)

    /usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/sphinx.conf 研究生创业

    可以看到我们输入的查询文字已经被拆分成了两个词,只是因为我们的测试数据中没有中文数据查询结果为空。我们插入几条新数据。

    INSERT INTO `test`.`documents` (

    `id` ,

    `group_id` ,

    `group_id2` ,

    `date_added` ,

    `title` ,

    `content`

    )

    VALUES (

    NULL , '2', '3', '2011-02-01 00:37:12', '研究生的故事', '研究生自主创业'

    ), (

    NULL , '1', '1', '2011-01-28 00:38:22', '研究', '为了创业而研究生命科学'

    );

    遇到的问题:

    1.安装mmseg时出现编译不通过的情况,yum install -y libtools

     aclocal

     libtoolize --force

     automake --add-missing

     autoconf

     autoheader

    make clean

    make

    makeinstall

    2安装csft出现问题 更改config文件 define USE_LIBICONV 1 改为define USE_LIBICONV 0 

    安装完成

  • 相关阅读:
    jquery收集
    c#语法
    asp.net+MVC
    在线OFFICE方案
    NodeJs中require use get typescript及其他知识点集合
    $.data()
    mongodb 安装、windows服务、创建用户
    Nodejs&Express
    Nodejs + MongoDb
    Nodejs
  • 原文地址:https://www.cnblogs.com/liuwenbohhh/p/5489483.html
Copyright © 2011-2022 走看看