zoukankan      html  css  js  c++  java
  • sphinx使用小记之使用小结

    sphinx使用小记之使用小结

    摘自:http://www.68idc.cn/help/jiabenmake/qita/20150124187789.html
    在使用sphinx的过程中有出现一些问题,也有注意事项,做一个备忘。一.问题及解决方案Q1:采用setFilter过滤的时候出现queryisnon-computable(sing&..
     

        在使用sphinx的过程中有出现一些问题,也有注意事项,做一个备忘。

        一.问题及解决方案

    Q1:采用setFilter过滤的时候出现

    query is non-computable(sing NOT operator)

    原因:在过滤等操作的字段在配置文件sphinx.conf中没有定义。

    Q2:采用扩展模式进行全文检索时出现

    查询结果为空,不报错

    原因:在进行全文检索的时候采用扩展模式没有配合设置相应的属性;'@AppID "-5"'这种扩展模式要搭配setMatchMode(SPH_MATCH_EXTENDED)使用

    Q3:

    针对整数的注意事项

    1>正整数采用sql_attr_uint(32位无符号整数)即可

    2>负整数采用sql_attr_bigint(64位有符号整数)即可

    Q4:

    过滤时间在配置文件中通常采用UNIX_TIMESTAMP,在PHP中利用API时怎样处理?

    解决:

    使用strtotime将时间字符串转化成时间戳

    Q5:

    ERROR: index 'oss_test_index': sql_range_query: Got timeout reading communication packets

    原因:超过了数据库的超时时间

    Q6:

    searchd error: per-query max_matches=2000 out of bounds (per-server max_matches=1000)

    原因:设置的最大limit值不能超过配置文件的maxmatches的值,因此修改值需要

    注意的是如果在设置的时候$sphinx->setLimits(start,len,max),不设置最大的max系统还是默认为1000

    最妥善的还是$sphinx->setLimits(($pageNo-1)*$pageSize,$pageSize,$pageNo*$pageSize

    Q7:

    如何排序

    解决:

     $this->sphinx->setSortMode(SPH_MATCH_EXTENDED,"Daily desc,AdID");

    Q8:

    出现断言失败的问题

    原因:大多数是因为参数不是要求的类型,因此要转换成该类型,通常需要int强制转换

    Q9:

    可忽略(在重整广告报表的过程中出现查询数据和导出数据不一致的问题)

    原因:参数没有转化为int类型(setLimits())

    Q10:

    在只更新增量索引的情况下,,并没有将新增的数据插入检索到的文件中

    原 因:增量索引分区的范围和主索引的分区范围不一样,主索引是min(id)~counter表的max_id,增量索引的范围是counter表的 max_id到statappadoss表的最大id,所以增量索引在继承主索引时需要重写sql_query_range的值

    Q11:

    多个索引一起引用的时候,为什么会出现返回的全文检索字段意义不明呢

    原因:索引中定义的全文检索字段sql_field_string不同

    Q12:

    将 增量索引的结果合并到主索引中的时候出现:attribute mismatch (me=/var/lib/sphinxsearch/data/oss_test_index, in=/var/lib/sphinxsearch/data/oss_test_index_throttled, idx=11, myattr=uint rate_id:32@640, inattr=bigint is_ex

    原因:主索引和增量索引查询得到的结果字段的顺序和属性必须是一致的。

    Q13:

    searchd error: client version is higher than daemon version .

    原因:是因为客户端版本与服务器版本不同。。。这时候才想起来,服务器是很早之前安装的3.24的版本,现在都4.1了,我本地下载的4.1肯定对不上了~~所以只要用服务器端的sphinxapi替换下就可以了~~

    Q14:在使用非!检索的时候出现

    query is non-computable(single NOT operator)

    原因:全文索引不支持单个操作,因此需要在索引文件里面增加一个能够检索所有文件的全文检索列

    如下:

    select ...’select_all‘ as dummy...=》全文检索列为dummy,值为select_all.这样就可以检索所有的documents

    再从所有documents中过滤掉!的值,如下:

    $sphinx->Query('(@dummy SELECT_ALL)(@AppID !"-5")','oss_test_index')

    Q15:

    对于一个字段既有字符串,又有负数,还有正数的情况下怎样解决?

    方案一:如问题十四所讲,单独使用全文索引(十四所述方法可以查询负数)

    方案二:在索引中增加同一列(添加别名),一列定义bigint类型用作整数(正数和负数)过滤

                    另外一列用作全文索引(字符串的查询)。如下:

                    a.AppID,a.AppID as AppIDString

                     sql_attr_bigint                 =AppID
                     sql_field_string                = AppIDString

                    $sphinx->setFilter('AppID',array(-5),true);

                    $result = $sphinx->Query('@AppIDString com.moji.MojiWeather','oss_test_index');

                    //如上,联合使用

            二. 索引文件需要定时重建来更新数据,主索引文件根据情况可较长时间建一次或者不建,增量索引可以酌情不长的一段时间建一次。在定时见索引的过程中用到 Linux系统的定时器crontab来调用shell脚本(shell脚本可以放在sphinxsearch目录下)

    主索引脚本:build_main_index.sh

    #!/bin/sh  #停止正在运行的searchd #/etc/init.d/sphinxsearch stop >> /var/log/sphinxsearch/searchd.log #建立主索引 indexer oss_test_index --rotate>> /var/lib/sphinxsearch/data/oss_test_index.log #启动守护程序 #/etc/init.d/sphinxsearch start >> /var/log/sphinxsearch/searchd.log
  • 相关阅读:
    Spire.Barcode好用的条码生在组件
    jQuery、js操作页面
    设计模式---简介
    设计模式---策略设计模式
    POI生成Excel文件:Excel,工具类,背景色,边框,居中,合并单元格
    设计模式---模板设计模式(java)
    maven打包不打lib目录里面的jar包解决办法
    MySQL库表操作
    Linux环境根据data目录文件恢复MySQL数据
    Linux 安装 mysql 与 mysql在Linux环境本地使用,但windows远程连不了问题处理
  • 原文地址:https://www.cnblogs.com/nov5026/p/4661051.html
Copyright © 2011-2022 走看看