简单叙述之前配置当中遇到的问题和解决办法并不做详细配置讲解;
第一节 配置
配置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下记事本打开;