sphinx使用小记之使用小结

摘要:
1、 问题和解决方案Q1:使用setFilter过滤时出现queryisnon computable(sing&…)。在使用sphinx的过程中存在一些问题,也有一些注意事项。请注意。此时,我记得服务器是很久以前安装的3.24版本,现在是4.1版本。我在本地下载的4.1肯定不正确~~所以只需在服务器端用sphinxapi替换它~~问题14:使用非!
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

免责声明:文章转载自《sphinx使用小记之使用小结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Apache服务安装及一些基本操作git--指定不上传的文件夹下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java电商支付系统手把手实现(二)

1 数据库设计 1.1 表关系梳理 仔细思考业务关系,得到如下表关系图 1.2 用户表结构 1.3 分类表结构 id=0为根节点,分类其实是树状结构 1.4 商品表结构 注意价格字段的类型为 decimal 1.5 支付信息表结构 1.6 订单表结构 乍一看,有必要搞这么多种的时间嘛?有以下诸多原因 前端显示需要,那就必须存着呀! 方便定位排...

db2性能优化

性能优化概述 DB2 的性能优化可以从三个方面分析:内存,CPU 和 I/O 。DB2 性能优化是一件较为复杂的综合性的工作 , 需要对问题的根源作全方位的探索和思考。同时也需要较深厚的数据库管理经验与优化知识。这对于初学者来说可能有些勉为其难。但是在很多情况下,随着 DB2 数据库中的数据量的不断增长或者用户数的激增,数据库系统的性能会显著下降,而此时快...

SQL性能优化(不断总结)

1.查询的模糊匹配     尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用.解决办法:其实只需要对该脚本略做改进,查询速度便会提高近百倍。改进方法如下:        a、修改前台程序——把查询条件的供应商名称一栏由原来的文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台...

mysql8新特性

1. 默认字符集由latin1变为utf8mb4 在8.0版本之前,默认字符集为latin1,utf8指向的是utf8mb3,8.0版本默认字符集为utf8mb4,utf8默认指向的也是utf8mb4。注:在Percona Server 8.0.15版本上测试,utf8仍然指向的是utf8mb3,与官方文档有出入。 2. MyISAM系统表全部换成In...

sql server百万级别数据量 农码一生

1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数...

Kibana(一张图片胜过千万行日志)

Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。 你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。 你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。 Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实...