• sphinx的使用


    1、下载地址 http://sphinxsearch.com/downloads/release/

    2、将其解压到D:sphinx,并在D:sphinx下新建目录data(用来存放索引文件)与log(用来存放日志文件);

    3、将D:sphinxsphinx.conf.in复制到D:sphinxinsphinx.conf.in,并重命名为sphinx.conf;

    4、修改sphinx.conf的内容

          首先把sphinx.conf各个保存路径改为咱们 斯芬克司 放置的路径

          4.1、搜索source src1修改{...}中的内容//这是索引源

            # 使用的数据库类型

            type = mysql 

            # 服务器

            sql_host = localhost 

            # 数据库登录名

            sql_user = root 

            # 数据库登录密码

            sql_pass = root 

            # 操作的数据库名称

            sql_db = test 

            # 数据库服务器端口

            sql_port = 3306 

            # 设置mysql检索编码,特别要注意这点,很多人中文检索不到数据库的编码是GBK或其他非UTF8

            sql_query_pre = SET NAMES utf-8 

            (以上7条前如有#将其删除)

          #获取数据的sql

    //看到这个地方

          sql_query=

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

    FROM documents

     #用于命令界面端的测试(cli)

     sql_query_info = SELECT * FROM documents WHERE id=$id

          4.2、搜索index test1修改{...}中的内容//索引

     #声明索引源

     source = src1

            # 放索引的目录及索引的文件名

           path = D:/sphinx/data/test1

     ##### 文档信息存储方式

     docinfo = extern

            # 编码

            charset_type = utf-8 

            # 指定utf-8编码表,字符表,注意:如使用这种方式,则sphinx会对中文进行单字切分

            charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F 

            # 简单分词,只有0和1,需要搜索中文必须置1

            ngram_len = 1 

            # 需要分词的字符,搜索中文时必须

             = U+3000..U+2FA1F 

            (以上7条前如有#将其删除)

    5、导入测试数据将D:sphinxexample.sql中语句执行到test数据库中,注意:test数据库创建时需要指定为utf-8格式;

    6、打开cmd窗口,进入目录D:sphinxin;

    7、建立索引,执行indexer.exe test1,test1即为sphinx.conf中index test1,成功。失败去配置文件中找原因

    8、搜索'test',执行search.exe test  最后一句error可以忽略

    9、搜索中文需要在数据库中含有中文,先修改数据库。然后重新执行第七步。然后在进行搜索“中文”。没有搜索到,因为windows命令行中的中文是GBK编码格式,所以没有匹配内容。我们可以使用PHP程序来试试。

    10、进入D:sphinxapi目录,可以发现sphinx支持php、java、ruby调用,并提供对应的test例子,这里我们使用php来操作,首先将api复制到我们的网站根目录下,重新命名为sphinxapi目录,新建search.php,内容为:

        <?php

        require 'sphinxapi.php';

        $s = new SphinxClient();

        $s->SetServer('localhost', 9312);

        $result = $s->Query('中国');

        print_r($result);

        echo '<br /><br />';

        $result = $s->Query('中文');

        print_r($result);

        ?>

    然后回到cmd命令行中,开启sphinx服务,执行searchd.exe(这个必须要执行的),成功后在浏览器中访问search.php,进行打印出来的数据对比

    11、至此sphinx在windows下的简单安装与使用就完成了。

    下面是在yii框架中的使用

    控制器:

    //下拉选项字段 搜索值  

        public function actionSearch_val()  

        {  

            $set = Yii::$app->request->get('set','');//接收搜索类型  

            $key = Yii::$app->request->get('key','');//接收值  

            if(yii::$app->request->isAjax){  

                $key1 = '';

                require ( "sphinxapi.php" );//引入类

                //echo $key.$set;die;  

                $cl = new SphinxClient();  

                $cl->SetServer ( '127.0.0.1', 9312);   

                $cl->SetArrayResult ( true );  

                    if(empty($key)){  

                        $cl->SetMatchMode ( SPH_MATCH_FULLSCAN );  

                    }else{

                        $cl->SetMatchMode ( SPH_MATCH_EXTENDED2 );  

                        if($set == 1){  

                            $key1 = $key;    

                        }else{  

                            $key1 = '@'.$set.' ('.$key.')';  

                        }

                    }  

                    $res = $cl->Query ( $key1, "test2" );  

                    if($res['total_found'] > 0){  

                        $ids = [];  

                        foreach ( $res['matches'] as $k => $row ) {  

                            $ids[] = $row['id'];  

                        }  

                        $query = new Query();  

                        $list = $query->from('position')->where(['in', 'id', $ids])->all();

                        foreach($list as $k=>$v){

                  $list[$k]=str_replace($key,"<font color='red'>{$key}</font>",$v);

                  }   

                    } else {  

                        $list = [];  

                    }          

                    Yii::$app->response->format = yiiwebResponse::FORMAT_JSON;  

                    return ['list' => $list ];  

                }  

            return $this->render('search2');  

    }

    视图:

    <?php  

      

    use yiihelpersHtml;  

    use yiihelpersUrl;  

      

    ?>  

    <form action="" method="get">  

        <input type="hidden" name="_csrf" value="">  

      

        <div class="col-md-1">  

            <select id="set">  

                <option value="1">全部</option>  

                <option value="position">职位</option>  

                <option value="biaoqian">标签</option>  

                <option value="xueli">学历</option>  

            </select>  

        </div>  

        <div class="col-md-3">  

            <input type="text" class="form-control" placeholder="keyword" id="key">  

        </div>  

        <button type="button" class="btn btn-default">Search</button>  

    </form>  

      

    <p>  

      

    <div id="content"></div>      

      

    <?php $this->beginBlock('index') ?>  

      

    $(function(){  

        $('.btn-default').click(function(){  

            var set = $('#set').val();  

            var key = $('#key').val();  

            var url = '<?php echo Url::toRoute(['hello/search_val'])?>';  

      

            $.getJSON(url, {'key':key, 'set':set}, function(data){  

                //alert(data);  

                console.log(data);  

                var lists= data.list;  

                //console.log(data.length)  

                  

                var html = '<table class="table">';//这里用的是拼接  

                for(var i = 0; i < lists.length; i++ ) {  

                    html += '<tr>';  

                    html += '<td>'+lists[i].id+'</td>';  

                    html += '<td>'+lists[i].position+'</td>';  

                    html += '<td>'+lists[i].biaoqian+'</td>';  

                    html += '<td>'+lists[i].xueli+'</td>';  

                    html += '</tr>';  

                }   

                html += '</table>';  

                $('#content').html(html);  

                  

            });  

        });  

    });  

    <?php $this->endBlock('index') ?>  

    <?php $this->registerJs($this->blocks['index'], yiiwebView::POS_END);?>

    转载于:https://www.cnblogs.com/liuzhen123/p/8059349.html

  • 相关阅读:
    声明方法java实际开发中泛型使用需要注意的一些问题
    动态代理代理静态代理与动态代理
    方法返回在android手机开机后,在工程模式下的短信自注册开关默认开启
    打开关闭android如何默认打开小区广播?
    nullnullandroid Bound Services 绑定服务
    nullnullAndroid Interface Definition Language (AIDL) 接口描述语言
    nullnullContent Provider Basics 内容提供者的基本操作
    工程文件辉哥opencv学习之路【三】——opencv运行别人程序
    程序输入幸运数
    批处理相对路径51CTO自动领豆(Python)
  • 原文地址:https://www.cnblogs.com/twodog/p/12137902.html
Copyright © 2020-2023  润新知