Home > Backend Development > PHP Tutorial > Enable sphinx full-text search and examples_PHP tutorial

Enable sphinx full-text search and examples_PHP tutorial

WBOY
Release: 2016-07-13 17:04:07
Original
874 people have browsed it

When compiling and installing sphinx, a lot of Chinesegarbled characters appeared, and finally an error was thrown and got stuck. I went to the official website and directly downloaded an rpm package, and the installation was a breeze. . . I don’t want to study the specific errors. Busy with development~~
Install both packages. One is mmseg This is a program that generates Chinese dictionary The other is csft which is the Chinese version of sphinx
rpm -ivh after installation. It went very smoothly~it was installed in less than half a minute. . .
Being lazy, I went directly to csft to download the Chinese dictionary library. Very good, very thoughtful. . .
unigram.txt uni.lib
unigram.txt Dictionary text, you can add your own keywords
Then use
mmseg -u unigram.txt Generate dictionary file : unigram.txt.uni Then rename uni.lib This is the dictionary recognized by sphinx.
Where to put it? Put it in the dictionary path you configured in sphinx.conf. We will talk about it later
Then it’s almost done
Let’s take a look at some useful programs in sphinx
[root@beihai365 /]# csft-
csft-indexer csft-search csft-searchd
csft-indexer is a program that generates full-text search indexes
csft-search is used to test whether the search is effective, and it is also very easy to use. Why not use this to check whether the full-text search is successful before I have developed a client script?
csft-searchd This is the daemon for sphinx search. After starting, you can use the script php python, etc. to open query.
It’s that simple~~
Let’s take a look at the two key parts
sphinx.conf configuration file
view plaincopy to clipboardprint?
source tmsgs
{
type type = mysql
                                                                                                                                                                                        to                                                                                                                                                                                             to                                                                                                                                                                           sql_db sql_db = phpwind75sp3
sql_port sql_port sql_port = 3306 # optional, default is 3306
                                                                                                                                                                                                                                                                                                                                                      sql_query                                                                                                                                                                                                     to            #sql_attr_uint                                                                                                                                          sql_attr_uint                                                                                                                                                                                             }

index tmsgsindex
{
source                                                                                                                                                     with        path                                    = /var/mmseg/searchdata/beihai365   
        docinfo                                 = extern   
        charset_type                            = zh_cn.gbk   
        #min_prefix_len  = 0   
        #min_infix_len  = 2   
        #ngram_len = 2   
        charset_dictpath                        = /var/mmseg/data   
        #min_prefix_len                          = 0   
        #min_infix_len                           = 0   
        #min_word_len                            = 2   
}   
  
indexer   
{   
        mem_limit                               = 128M   
}   
  
searchd   
{   
        #listen                                = 3312   
        log                                 = /var/log/searchd.log   
        query_log                           = /var/log/query.log   
        read_timeout                        = 5   
        max_children                        = 30   
        pid_file                            = /var/log/searchd.pid   
        max_matches                         = 1000   
        #seamless_rotate                     = 1   
        #preopen_indexes                     = 0   
        #unlink_old                          = 1   
}  
source tmsgs
{
        type                                    = mysql
        sql_host                                = localhost
        sql_user                                = root
        sql_pass                                = 1
        sql_db                                  = phpwind75sp3
        sql_port                                = 3306  # optional, default is 3306
        #sql_sock                                = /tmp/mysql3307.sock
        sql_query_pre                           = SET NAMES gbk
        sql_query                               = SELECT id,name,type,stock FROM pw_tools
        #sql_attr_uint                          = id
        sql_attr_uint                           = stock
}
index tmsgsindex
{
        source                                  = tmsgs
        path                                    = /var/mmseg/searchdata/beihai365
        docinfo                                 = extern
        charset_type                            = zh_cn.gbk
        #min_prefix_len  = 0
        #min_infix_len  = 2
        #ngram_len = 2
        charset_dictpath                        = /var/mmseg/data
        #min_prefix_len                          = 0
        #min_infix_len                           = 0
        #min_word_len                            = 2
}
indexer
{
        mem_limit                               = 128M
}
searchd
{
        #listen                                = 3312
        log                                 = /var/log/searchd.log
        query_log                           = /var/log/query.log
        read_timeout                        = 5
        max_children                        = 30
        pid_file                            = /var/log/searchd.pid
        max_matches                         = 1000
        #seamless_rotate                     = 1
        #preopen_indexes                     = 0
        #unlink_old                          = 1
}

再看一下 测试客户端代码
view plaincopy to clipboardprint?
    header("Content-type:text/html;charset=utf-8");   
    include 'sphinxapi.php';   
    $cl = new SphinxClient();   
    $cl->SetServer('localhost',3312);   
    $cl->SetMatchMode(SPH_MATCH_ALL);   
    $cl->SetArrayResult(true);   
    $res = $cl->Query("名卡","*");   
    print_r($res);   
      
?>  
header("Content-type:text/html;charset=utf-8");
include 'sphinxapi.php';
$cl = new SphinxClient();
$cl->SetServer('localhost',3312);
$cl->SetMatchMode(SPH_MATCH_ALL);
$cl->SetArrayResult(true);
$res = $cl->Query("名卡","*");
print_r($res);

?>
“名卡”这个关键字是我自己手动在字典里面添加的。看是否能真的搜到
view plaincopy to clipboardprint?
Array   
(   
    [error] =>   
    [warning] =>   
    [status] => 0   
    [fields] => Array   
        (   
            [0] => name   
            [1] => type   
        )   
  
    [attrs] => Array   
        (   
            [stock] => 1   
        )   
  
    [matches] => Array   
        (   
            [0] => Array   
                (   
                    [id] => 8   
                    [weight] => 1   
                    [attrs] => Array   
                        (   
                            [stock] => 100   
                        )   
  
                )   
  
        )   
  
    [total] => 1   
    [total_found] => 1   
    [time] => 0.018   
    [words] => Array   
        (   
            [名卡] => Array   
                (   
                    [docs] => 1   
                    [hits] => 1   
                )   
  
        )   
  
)  
Array
(
    [error] =>
    [warning] =>
    [status] => 0
    [fields] => Array
        (
            [0] => name
            [1] => type
        )
    [attrs] => Array
        (
            [stock] => 1
        )
    [matches] => Array
        (
            [0] => Array
                (
                    [id] => 8
                    [weight] => 1
                    [attrs] => Array
                        (
                            [stock] => 100
                        )
                )
        )
    [total] => 1
    [total_found] => 1
    [time] => 0.018
    [words] => Array
        (
            [名卡] => Array
                (
                    [docs] => 1
                    [hits] => 1
                )
        )
)
完全没问题。搜索出来了。
几个关键的操作
[root@beihai365 /]# csft-searchd --stop    停止搜索守护
[root@beihai365 /]# csft-indexer --all    针对所有节点生成索引。你也可以针对某个节点生成索引比如:csft-indexer  xx
[root@beihai365 /]# csft-search App   搜索关键字  App 。 不过看下面信息没有搜到和没有命中任何的文档。
Coreseek Full Text Server 3.1
Copyright (c) 2006-2008 coreseek.com
using config file './csft.conf'...
1,
pt:1, 1;        index 'tmsgsindex': query 'App ': returned 0 matches of 0 total in 0.017 sec
words:
1. 'app': 0 documents, 0 hits
当大家在运行这些命令的时候发现,需要你自己手动的置顶 --config  sphinx.conf   配置文件的路径。。很不方便。。
所以我干脆   ln -s  一个在 ./ 。这样不用每次都去敲入  --config  

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/630884.htmlTechArticle在编译安装 sphinx 的时候出现很多 中文 乱码 ,最后抛出错误卡住了。 我去到官方直接下载一个 rpm 包,安装就很爽。。。具体错误不想研...
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template