sphinx/coreseek 精确搜索记录

简单叙述之前配置当中遇到的问题和解决办法并不做详细配置讲解;

第一节 配置

              配置csft.conf可以参考这篇博客简单了解一下,后面咱们再来修改这个配置文件

              http://www.cnblogs.com/yjf512/p/3598332.html

              只记得遇到了几个问题诶,其实不是这么少只是想不起来了

              问题1:执行命令 bin\indexer -c etc\csft.conf 出现错误 Unigram dictionary load Error

              不用怀疑肯定是路径出问题了;

              检测路径是不是有问题可以用命令:cd 路径

              诶,竟然发现路径是对的;

              接下来就会发现你指定的目录下肯定是没有uni.lib文件

              问题2:中文搜索乱码

              echo 网络搜索 | iconv -f gbk -t utf-8 | search -c etc\csft.conf --stdin | iconv -f utf-8 -t gbk

第二节     配置修改

               解决上面提到的搜索问题

               sql_attr_uint    //无符号整型属性

               sql_attr_timestamp   //时间戳属性,经常用来做排序,sql_attr_str2ordinal  这些是干什么用的呢?

                sql_attr_str2ordinal   //字符串排序属性。一般我们按照字符串排序的话,我们会将这个字符串存下来进入到索引中,然后在查询的时候比较索引中得字符大小进行排序。

                但是这个时候索引就会很大,于是我们就想到了一个方法,我们在建立索引的时候,先将字符串值从数据库中取出,暂存,排序。

                然后给排序后的数组分配一个序号,然后在建立索引的时候,就将这个序号存入到索引中去。这样在查询的时候也就能完成字符串排序的操作。

                这,就是这个字段的意义。

                配置文件里添加了:

                        sql_query                = SELECT all_id'id',name,baoming,LENGTH(name) AS namecount ,trim(name) AS newname,trim(baoming) AS newbaoming from rank_all

                        属性添加      sql_attr_uint            = namecount //暂时没有用到,留以后用

                        属性添加      sql_attr_str2ordinal = newbaoming

                php 文件里添加了

                        $sc->SetGroupBy ("newbaoming", SPH_GROUPBY_ATTR,'namecount ASC ');

                        $res = $sc->query($findKey, 'all');  // 在 all 索引中查询 $findKey

                        需要查询的sql:                        

                         $sql = "SELECT rank_all.baoming, rank_all.num,   REPLACE( SUBSTR( rank_all.name, 1, 9 ) ,  '?',  '' ) name ,CASE WHEN lower(rank_all.name)='".strtolower($findKey)."' THEN 1 ELSE 0 END                                           namecount ,                     rank_table.ico_url 

                         FROM rank_all, rank_table 

                         WHERE rank_all.market = rank_table.market 

                         AND rank_all.all_id in($arrs) 

                         AND DATE_FORMAT( date_sub(curdate() , INTERVAL " . C(MAX_INTERVAL) . "  DAY ) , '%Y%m%d') <= rank_all.tag  

                         ORDER BY namecount DESC,rank_all.baoming";

                

            需要注意的地方:

                            如果你修改了配置文件csft.conf的max_matches            = 10000然后发现搜索出来的数据只有1000条,那是因为SetLimits(0,20,1000)第三个参数默认为1000条不受max_matches控制

                            同样如果第三个超过max_matches设置的值,你将搜索不到任何数据

                            
                            我记不住啊,就写这里吧

                            linux定时重建索引:

                            crontab -e 

                            19 4 * * * /bin/sh /usr/local/sphinx/bin/build_main_index.sh

                             删除 crontab

                            crontab -r

            最后一定要开启服务bin\searchd -c etc\csft.conf;cstf.conf编码为无bom格式,千万别用win下记事本打开;


你可能感兴趣的:(sphinx/coreseek 精确搜索记录)