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:[email protected], 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

时间: 2024-08-29 20:43:51

sphinx使用小记之使用小结的相关文章

sphinx使用小记之ubuntu下安装sphinx

sphinx是一个基于SQL的全文检索引擎,当查询百万级以上的大数据时运用会显著的提高查询的速度. 在ubuntu环境下安装sphinx需要根据该环境下的php环境配置合适的版本,ubuntu的apt-get可以自动选择当前最新的版本下载,因此在版本上应该不会有不兼容的情况. 1.安装sphinx sudo apt-get install sphinxseach 2.配置sphinx.conf文件   cp /etc/sphinxearch/sphinx.conf.simple /etc/sph

avalonJS-源码阅读(三) VMODEL

avalon的重头戏.终于要到我最期待的vmodel了. ps:这篇博文想做的全一点,错误少一点,所以会有后续的更新在这篇文章中. 状态:一稿 目录[-] avalon dom小结 数据结构 观察者模式 依赖收集与触发 avalon Observable avalon modelFactory loopModel 函数介绍 isEqual 小记 avalon dom小结 看过前面三篇文章后,应该会对avalon关于dom的处理有个大体的理念.这里再理一遍:avalon通过手动触发scan函数来遍

sphinx使用代码小结

<?php if(isset($_GET['keywords']) && !empty($_GET['keywords'])) { $keywords = $_GET['keywords']; require('sphinxapi.php'); //包含sphinx驱动文件 $sc = new SphinxClient(); //生成客户端 $sc->setServer('localhost',9312); //设置服务器 $sc->setMatchMode(SPH_MA

jquery 点点滴滴小记

字符截取显示 var text = $(".content").text(); var textNum = text.length; var textInt = text.slice(0,140); $(".content").each(function () { if (textNum >= 160) { $(this).html(textInt + "…" + "详细") $(".dis_btn"

windows server 2008 enterprise r2 x64 激活小记

前几天给客户安装了两个 windows windows server 2008 enterprise r2 版本的系统,发现存在几个小问题,不得不记录一下 问题1:windows 2008 64位的企业版支持的内存居然只有32个G,服务器有64个G,显示可用内存32个G.不过版本既然是客户要求的,我也就不说啥了. 问题2:之前的旧机器换2008的系统,一般没有序列号,我就自作聪明的去网上找了个无名的激活软件,一般来说还是激活了. 结果过了半个月,发现机器频繁自动关机.依然要处理.于是跟客户说明后

coreseek+sphinx+mysql+thinkphp整合

1.安装coreseek 1.1首先升级或安装系统依赖库 yum install make gcc g++ automake libtool mysql-client libmysqlclient15-dev libxml2-dev libexpat1-dev 1.2下载Coreseek3.2.14 解压:tar zxvf coreseek-3.2.14.tar.gz cd coreseek-3.2.14 cd mmseg-3.2.14 #在安装前首先安装mmseg插件 ./configure

校园网仿站——初学HTML&amp;CSS小记

  记录的时候已经完成了2/3,还剩一个循环动画.一个登录位置以及最下方的一些链接就完成了.在一开始做的时候,因为丝毫没有头绪,便开了Chrome开发者模式看了一会源代码(HTML),直到完成了1/3,才发现还有CSS的源代码,索性直接重做.重做的效率明显高了很多,在第一次仿的时候已经学到了很多HTML&CSS的知识,但是还是有很多不知道,只能一边做一边百度. 个人觉得,在学习的时候,并没有一个完整的系统,做一点学一点导致知识点零散,只有一小部门有关联,可以串起来. 这次的作业有几个问题: 一.

深度学习主机攒机小记

本文來源網址:http://www.52nlp.cn/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E4%B8%BB%E6%9C%BA%E6%94%92%E6%9C%BA%E5%B0%8F%E8%AE%B0 Update: 这篇文章写于一年以前,这一年深度学习的大潮继续推进,1080也升级到1080TI了,攒机也有了更多更好的选择.最近更新了一篇文章:<从零开始搭建深度学习服务器:硬件选择>,可以看完下文后(主要提供了一些选择的思路),再来看最新的这篇(主要提供了一

Java 文件句柄泄露问题解决小记(转)

转:Java 文件句柄泄露问题解决小记 维护 WebIDE 免不了要管理很多的文件, 自从我们线上系统增加了资源回收功能,便一直受一个问题困扰:后台线程解绑目录时偶尔报错,看症状因为是某些文件被占用了,目录不能解绑.但是由于系统中很多地方都有打开文件,各种包也存在复杂的的引用关系,在搜查几遍代码后并没有发现什么明显的异常. 由于这个功能清理的是既没在线又没有在离线列表中的磁盘绑定目录,那么很可能是文件句柄泄露了,还有一种原因可能是 JVM 延迟释放文件句柄,不过实际是什么原因还需要用数据说话.