Sphinx 单词+数字索引

2017年9月26日 没有评论

导读

Sphinx 是一个非常强大的全文搜索引擎,能处理各种复杂的索引请求.但有时候需要一些特殊的设置.

问题

比如文档中有一种词,该词包含了字母和数字,比如(onepiece123) 如果一般情况下直接搜索onepiece或者123的时候,你是得不到这个文档的.

原因

sphinx在处理单词时,把整个词看作一个整体,用关键词搜索的时候也是,比如,搜索词如果是onepiece,那么得到的文档只能是包含了onepiece这个词段(如onepiece 123)的才能被索引到,否则除非直接搜索onepiece123,你是得不到文档onepiece123的.

解决方式

这种时候有两种方式可以解决:

中缀索引

设置中缀索引长度,中缀索引可以让我们进行通配符搜索文档的操作,比如word, word*, *word

min_infix_len

中缀索引长度默认为0,即不做中缀索引,假如设置成一个合适的长度,那么就能根据单词的某一部分查找到对应的文档,比如把min_infix_len 设置为2, 那么文档中包含test的词汇就会被分成 te, es, st tes, est,test这几种(最小长度2),当我们用关键字es 去搜索的时候,就能命中这个包含test的文档,当然,这也导致了我们的索引文件大小大幅度增加,索引速度降低的问题

为了解决开始的时候我们提到的这种单词带数字的查找,我们可以设置一个比较合适的中缀索引长度,比如8,那么包含onepiece123这个词的文档会被分成onepiece, onepiece1, onepiece12, onepiece123, nepiece12,…等等(按顺序包含至少8个原有字符,不能跳过任意的字母),这样,当我们搜索oinepiece的时候, 因为原有的oinepiece123文档被分成了包含了onepiece等多个的文档,我们就能命中这个oinepiece123所在的文档了.

设置regexp_filter

该设置允许我们通过正则的方式映射最终的文档格式.那样的话我们就能统一一些常见的单词或者短语的格式了.
比如

'iphone 3gs' , 'iphone 3 gs' (或者甚是 'iphone3 gs')

当我们在搜索这些关键词的时候,我们都希望能命中包含iphone3gs这个文档,我们可以像这样设置索引:

regexp_filter = [(iphone 3gs)| (iphone 3 gs) | (iphone3 gs)] => iphone3gs

这样在创建索引的时候, 所有包含上面三种的iphone 3gs的格式都能映射成iphone3gs, 在搜索iphone3gs的时候, 就能命中所有包含上面三种词的文档了

回归我们的初始问题,这种方式处理单词+数字的索引设置可以这么设置

regexp_filter = ([a-z|A-Z]+)(\d+) =>\1 \2

“\1″和”\2″之间有空格,”\1″对应单词的正则匹配, ”\2″对应数字的正则匹配,中间加了一个空格,这就表示在创建索引的时候单词+数字的文档会被分开.
不过要说明的是,如果想使用这个配置,需要安装一个名叫re2的正则引擎替代系统内置的正则引擎,安装好后重新编译安装sphinx的源码,在./configure的时候带上参数
--with-re2,然后regexp_filter才会有用

这样也能解决单词+数字的搜索问题。

总结

两种方式都能起作用,中缀索引比较简单,但会大幅度增加索引文件的大小和索引的速度.regexp_filter安装正则引擎比较烦,而且要重新编译安装sphinx, 但对索引文件的大小和索引速度的影响较小。

分类: 未分类 标签:

mac编译nginx lua模块报 ld: symbol(s) not found for architecture x86_64

2017年8月1日 没有评论

mac上源码编译安装nginx lua模块, make时报ld: symbol(s) not found for architecture x86_64错误,

具体为

-Wl,-rpath,/usr/local/openresty/luajit/lib -L/Applications/ngx_openresty-1.4.3.6/build/luajit-root/usr/local/openresty/luajit/lib -lluajit-5.1 -lm -pagezero_size 10000 -image_base 100000000 -lpcre -lssl -lcrypto -lz
Undefined symbols for architecture x86_64:
"_pcre_free_study", referenced from:
_ngx_http_lua_regex_free_study_data in ngx_http_lua_regex.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [objs/nginx] Error 1
make[1]: *** [build] Error 2
make: *** [all] Error 2

百度出的解决方法五花八门,亲自尝试都没解决问题,

找到一篇文章 http://www.mamicode.com/info-detail-1345456.html,发现是查找pcre的问题。

解决方法如下:

# mdfind pcre | grep /usr/local

找到 pcre 所在目录 /usr/local/Cellar/pcre/8.36/

修改nginx编译参数,问题解决

--prefix=/usr/local/nginx --add-module=/usr/local/src/echo-nginx-module --add-module=/usr/local/src/nginx-http-concat --with-http_stub_status_module --with-http_ssl_module --with-pcre --with-debug --with-pcre-jit --add-module=/usr/local/src/ngx_devel_kit-0.3.0 --add-module=/usr/local/src/lua-nginx-module-0.10.9rc8 --with-cc-opt="-I/usr/local/Cellar/pcre/8.36/include" --with-ld-opt="-L/usr/local/Cellar/pcre/8.36/lib"
分类: 未分类 标签:

coreseek 字典 淘宝 电商词库下载

2017年2月16日 没有评论

scel转txt工具
https://github.com/archerhu/scel2mmseg

字典合并工具
https://github.com/mawenbao/coreseek-scripts

使用方法参考
https://www.mawenbao.com/note/mmseg-custom-dict.html

整理了淘宝电商词库,有需要的话评论里留言联系

分类: 未分类 标签: , , ,

crontab下命令不执行的问题

2017年1月20日 没有评论

曾经碰到过crontab中设置的命令不执行,但是将命令copy出来手动执行没有问题!

比如:
*/1 * * * * php -r "echo time();"

请写完整你的命令路径
*/1 * * * * /usr/sbin/php -r "echo time();"

因为在命令行下会加载你的环境变量,但是在crontab中不会加载,它找不到你要执行的命令

分类: 未分类 标签:

mysql procedure

2016年5月19日 没有评论
DELIMITER //
 
CREATE PROCEDURE fix_trade_status(in var_supplier_trade_id varchar(32))
BEGIN
 
DECLARE var_prt_supplier_trade_id varchar(32) DEFAULT '';
DECLARE var_trade_id varchar(32) DEFAULT '';
DECLARE var_prt_trade_id varchar(32) DEFAULT '';
 
 
SELECT prt_trade_id, trade_id INTO var_prt_supplier_trade_id, var_trade_id FROM supplier_trade WHERE id = var_supplier_trade_id;
 
UPDATE supplier_trade SET status = 'closed', finished_type = 'refunded', fulfillment_status = 'finished', refunded_at = unix_timestamp(), closed_at = unix_timestamp(), success_at = unix_timestamp() WHERE id = var_supplier_trade_id AND has_refund = 1 AND order_number = (SELECT COUNT(id) FROM supplier_trade_item WHERE trade_id = var_supplier_trade_id AND refund_status = 'refunded');
 
if var_prt_supplier_trade_id != '' then
    SELECT prt_trade_id INTO var_prt_trade_id FROM prt_supplier_trade WHERE id = var_prt_supplier_trade_id;
 
    UPDATE prt_supplier_trade SET status = 'closed', finished_type = 'refunded', fulfillment_status = 'finished', refunded_at = unix_timestamp(), closed_at = unix_timestamp(), success_at = unix_timestamp() WHERE id = var_prt_supplier_trade_id AND has_refund = 1 AND order_number = (SELECT COUNT(id) FROM supplier_trade WHERE prt_trade_id = var_prt_supplier_trade_id AND status = 'closed');
end if;
 
if var_trade_id != '' then
    UPDATE trade SET status = 'closed', finished_type = 'refunded', fulfillment_status = 'finished', refunded_at = unix_timestamp(), closed_at = unix_timestamp(), success_at = unix_timestamp() WHERE id = var_supplier_trade_id AND has_refund = 1 AND order_number = (SELECT COUNT(id) FROM supplier_trade_item WHERE trade_id = var_supplier_trade_id AND refund_status = 'refunded');
end if;
 
 
if var_prt_trade_id != '' then
    UPDATE prt_trade SET status = 'closed', finished_type = 'refunded', fulfillment_status = 'finished', refunded_at = unix_timestamp(), closed_at = unix_timestamp(), success_at = unix_timestamp() WHERE id = var_prt_supplier_trade_id AND has_refund = 1 AND order_number = (SELECT COUNT(id) FROM trade WHERE prt_trade_id = var_prt_supplier_trade_id AND status = 'closed');
end if;
 
select var_prt_supplier_trade_id;
 
END
分类: 未分类 标签:

mysql索引降cpu占用

2014年10月24日 没有评论

这样一条mysql查询

SELECT * FROM keyword WHERE status = ‘active’ AND is_detected = 1 AND begin_time <= 1414080000 AND end_time >= 1414080000 AND click_start <= '13:43:31' AND click_end > ’13:43:31′ AND clicked_times < times AND ((last_click_time + click_interval) < 1414129411) ORDER BY last_click_time ASC LIMIT 1 ; mysql链接400左右,keyword表有记录7200多条,没加任何索引(主键id除外), 8核16G的阿里云cpu占用700%多。 对status字段做索引,cpu占用马上降到130% ! 对status和is_detected做联合做引,cpu降至110% !

分类: 未分类 标签:

centos 6.5 安装 openresty, php, mysql

2014年9月2日 没有评论
#准备工作
yum install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers libmcrypt libmcrypt-devel
yum install xmlto doxygen

[mysql]

#安装cmake
tar zxvf cmake-3.0.1.tar.gz
cd cmake-3.0.1
./configure
gmake
gmake install
 
#添加mysql用户
/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
 
#安装Mysql
tar zxvf mysql-5.5.38.tar.gz
cd mysql-5.5.38
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc/
#如果碰到Curses library not found, 则
#yum install ncurses-devel</span><span style="color: #008000;">
#rm -rf CMakeCache.txt
#然后重复上面一步
 
make
make install
#因为只用到php的mysql连接库,到此为止。 
#其余参考 http://www.cnblogs.com/wubaiqing/archive/2011/11/08/2241195.html
#安装php
tar zxvf php-5.3.28.tar.gz
cd php-5.3.28
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-gd --with-iconv --with-zlib --enable-xml --enable-bcmath --enable-shmop --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-pear --with-gettext --enable-session --with-mcrypt --with-curl
make
make install
#安装rabbitmq-c
tar zxvf rabbitmq-c-0.5.1.tar.gz
cd rabbitmq-c-0.5.1
mkdir build &amp;&amp; cd build 
cmake ..
cmake --build .
make
make install
 
#安装amqp扩展
tar zxvf amqp-1.4.0.tgz
cd amqp-1.4.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp
make
make install
 
#安装完毕,如果报找不到librabbitmq.so.1, 执行
#ln -s /usr/local/lib64/librabbitmq.so.1 /usr/local/lib/librabbitmq.so.1
分类: 未分类 标签:

设定CentOS默认编码为GBK

2014年9月2日 没有评论

在使用CentOS系统时,出现的各种中文乱码,以下为设置系统编码默认为GBK的方法。

1. yum groupinstall chinese-support

2. vim /etc/sysconfig/i18n

LANG=”zh_CN.GBK”
SUPPORTED=”zh_CN.gbk:zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en”
SYSFONT=”latarcyrheb-sun16″

3. vim /etc/profile

添加

export LC_ALL=”zh_CN.GBK”
export LANG=”zh_CN.GBK

4. 立即使配置生效

命令: source /etc/profile

附:查看系统编码

命令:echo $LANG

命令 : locale

分类: 未分类 标签: