sphinx 如何做模糊检索
配置实例
3.1、数据源。
这里我们采用 mysql的数据源。具体情况如下:
Mysql server:192.168.1.10
Mysql db :test
Mysql 表:test.sphinx_article
mysql> desc sphinx_article;
———– ——————— —— —– ——— —————-
| Field | Type | Null | Key | Default | Extra |
———– ——————— —— —– ——— —————-
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | | |
| cat_id | tinyint(3) unsigned | NO | MUL | | |
| member_id | int(11) unsigned | NO | MUL | | |
| content | longtext | NO | | | |
| created | int(11) | NO | MUL | | |
———– ——————— —— —– ——— —————-
6 rows in set (0.00 sec)
3.2、配置文件
* [root@localhost ~]#cd /usr/local/sphinx/etc #进入sphinx的配置文件目录
* [root@localhost etc]# cp sphinx.conf.dist sphinx.conf #新建Sphinx配置文件
* [root@localhost etc]# vim sphinx.conf #编辑sphinx.conf
具体实例配置文件:
##### 索引源 ###########
source article_src
{
type = mysql #####数据源类型
sql_host = 192.168.1.10 ######mysql主机
sql_user = root ########mysql用户名
sql_pass = pwd############mysql密码
sql_db = test #########mysql数据库名
sql_port= 3306 ###########mysql端口
sql_query_pre = SET NAMES UTF8 ###mysql检索编码,特别要注意这点,很多人中文检索不到是数据库的编码是GBK或其他非UTF8
sql_query = SELECT id,title,cat_id,member_id,content,created FROM sphinx_article ####### 获取数据的sql
#####以下是用来过滤或条件查询的属性############
sql_attr_uint = cat_id ######## 无符号整数属性
sql_attr_uint = member_id
sql_attr_timestamp = created ############ UNIX时间戳属性
sql_query_info = select * from sphinx_article where id=$id ######### 用于命令界面端(CLI)调用的测试
}
### 索引 ###
index article
{
source = article_src ####声明索引源
path = /usr/local/sphinx/var/data/article #######索引文件存放路径及索引的文件名
docinfo = extern ##### 文档信息存储方式
mlock = 0 ###缓存数据内存锁定
morphology = none #### 形态学(对中文无效)
min_word_len = 1 #### 索引的词最小长度
charset_type = utf-8 #####数据编码
##### 字符表,注意:如使用这种方式,则sphinx会对中文进行单字切分,
##### 即进行字索引,若要使用中文分词,必须使用其他分词插件如 coreseek,sfc
charset_table = U FF10..U FF19->0..9, 0..9, U FF41..U FF5A->a..z, U FF21..U FF3A->a..z,\
A..Z->a..z, a..z, U 0149, U 017F, U 0138, U 00DF, U 00FF, U 00C0..U 00D6->U 00E0..U 00F6,\
U 00E0..U 00F6, U 00D8..U 00DE->U 00F8..U 00FE, U 00F8..U 00FE, U 0100->U 0101, U 0101,\
U 0102->U 0103, U 0103, U 0104->U 0105, U 0105, U 0106->U 0107, U 0107, U 0108->U 0109,\
U 0109, U 010A->U 010B, U 010B, U 010C->U 010D, U 010D, U 010E->U 010F, U 010F,\
U 0110->U 0111, U 0111, U 0112->U 0113, U 0113, U 0114->U 0115, U 0115, \
U 0116->U 0117,U 0117, U 0118->U 0119, U 0119, U 011A->U 011B, U 011B, U 011C->U 011D,\
U 011D,U 011E->U 011F, U 011F, U 0130->U 0131, U 0131, U 0132->U 0133, U 0133, \
U 0134->U 0135,U 0135, U 0136->U 0137, U 0137, U 0139->U 013A, U 013A, U 013B->U 013C, \
U 013C,U 013D->U 013E, U 013E, U 013F->U 0140, U 0140, U 0141->U 0142, U 0142, \
U 0143->U 0144,U 0144, U 0145->U 0146, U 0146, U 0147->U 0148, U 0148, U 014A->U 014B, \
U 014B,U 014C->U 014D, U 014D, U 014E->U 014F, U 014F, U 0150->U 0151, U 0151, \
U 0152->U 0153,U 0153, U 0154->U 0155, U 0155, U 0156->U 0157, U 0157, U 0158->U 0159,\
U 0159,U 015A->U 015B, U 015B, U 015C->U 015D, U 015D, U 015E->U 015F, U 015F, \
U 0160->U 0161,U 0161, U 0162->U 0163, U 0163, U 0164->U 0165, U 0165, U 0166->U 0167, \
U 0167,U 0168->U 0169, U 0169, U 016A->U 016B, U 016B, U 016C->U 016D, U 016D, \
U 016E->U 016F,U 016F, U 0170->U 0171, U 0171, U 0172->U 0173, U 0173, U 0174->U 0175,\
U 0175,U 0176->U 0177, U 0177, U 0178->U 00FF, U 00FF, U 0179->U 017A, U 017A, \
U 017B->U 017C,U 017C, U 017D->U 017E, U 017E, U 0410..U 042F->U 0430..U 044F, \
U 0430..U 044F,U 05D0..U 05EA, U 0531..U 0556->U 0561..U 0586, U 0561..U 0587, \
U 0621..U 063A, U 01B9,U 01BF, U 0640..U 064A, U 0660..U 0669, U 066E, U 066F, \
U 0671..U 06D3, U 06F0..U 06FF,U 0904..U 0939, U 0958..U 095F, U 0960..U 0963, \
U 0966..U 096F, U 097B..U 097F,U 0985..U 09B9, U 09CE, U 09DC..U 09E3, U 09E6..U 09EF, \
U 0A05..U 0A39, U 0A59..U 0A5E,U 0A66..U 0A6F, U 0A85..U 0AB9, U 0AE0..U 0AE3, \
U 0AE6..U 0AEF, U 0B05..U 0B39,U 0B5C..U 0B61, U 0B66..U 0B6F, U 0B71, U 0B85..U 0BB9, \
U 0BE6..U 0BF2, U 0C05..U 0C39,U 0C66..U 0C6F, U 0C85..U 0CB9, U 0CDE..U 0CE3, \
U 0CE6..U 0CEF, U 0D05..U 0D39, U 0D60,U 0D61, U 0D66..U 0D6F, U 0D85..U 0DC6, \
U 1900..U 1938, U 1946..U 194F, U A800..U A805,U A807..U A822, U 0386->U 03B1, \
U 03AC->U 03B1, U 0388->U 03B5, U 03AD->U 03B5,U 0389->U 03B7, U 03AE->U 03B7, \
U 038A->U 03B9, U 0390->U 03B9, U 03AA->U 03B9,U 03AF->U 03B9, U 03CA->U 03B9, \
U 038C->U 03BF, U 03CC->U 03BF, U 038E->U 03C5,U 03AB->U 03C5, U 03B0->U 03C5, \
U 03CB->U 03C5, U 03CD->U 03C5, U 038F->U 03C9,U 03CE->U 03C9, U 03C2->U 03C3, \
U 0391..U 03A1->U 03B1..U 03C1,U 03A3..U 03A9->U 03C3..U 03C9, U 03B1..U 03C1, \
U 03C3..U 03C9, U 0E01..U 0E2E,U 0E30..U 0E3A, U 0E40..U 0E45, U 0E47, U 0E50..U 0E59, \
U A000..U A48F, U 4E00..U 9FBF,U 3400..U 4DBF, U 20000..U 2A6DF, U F900..U FAFF, \
U 2F800..U 2FA1F, U 2E80..U 2EFF,U 2F00..U 2FDF, U 3100..U 312F, U 31A0..U 31BF, \
U 3040..U 309F, U 30A0..U 30FF,U 31F0..U 31FF, U AC00..U D7AF, U 1100..U 11FF, \
U 3130..U 318F, U A000..U A48F,U A490..U A4CF
min_prefix_len = 0 #最小前缀
min_infix_len = 1 #最小中缀
ngram_len = 1 # 对于非字母型数据的长度切割
#加上这个选项,则会对每个中文,英文字词进行分割,速度会慢
#ngram_chars = U 4E00..U 9FBF, U 3400..U 4DBF, U 20000..U 2A6DF, U F900..U FAFF,\
#U 2F800..U 2FA1F, U 2E80..U 2EFF, U 2F00..U 2FDF, U 3100..U 312F, U 31A0..U 31BF,\
#U 3040..U 309F, U 30A0..U 30FF, U 31F0..U 31FF, U AC00..U D7AF, U 1100..U 11FF,\
#U 3130..U 318F, U A000..U A48F, U A490..U A4CF
}
######### 索引器配置 #####
indexer
{
mem_limit = 256M ####### 内存限制
}
############ sphinx 服务进程 ########
searchd
{
#listen = 9312 ### 监听端口,在此版本开始,官方已在IANA获得正式授权的9312端口,以前版本默认的是3312
log = /usr/local/sphinx/var/log/searchd.log #### 服务进程日志 ,一旦sphinx出现异常,基本上可以从这里查询有效信息,轮换(rotate)出的问题一般可在此寻到答案
query_log = /usr/local/sphinx/var/log/query.log ### 客户端查询日志,笔者注:若欲对一些关键词进行统计,可以分析此日志文件
read_timeout = 5 ## 请求超时
max_children = 30 ### 同时可执行的最大searchd 进程数
pid_file = /usr/local/sphinx/var/log/searchd.pid #######进程ID文件
max_matches = 1000 ### 查询结果的最大返回数
seamless_rotate = 1 ### 是否支持无缝切换,做增量索引时通常需要
}
3.3、建立索引文件
[root@localhost sphinx]# bin/indexer -c etc/sphinx.conf article ### 建立索引文件的命令
Sphinx 0.9.9-release (r2117)
Copyright (c) 2001-2009, Andrew Aksyonoff
using config file ‘etc/sphinx.conf’…
indexing index ‘article’…
collected 1000 docs, 0.2 MB
sorted 0.4 Mhits, 99.6% done
total 1000 docs, 210559 bytes
total 3.585 sec, 58723 bytes/sec, 278.89 docs/sec
total 2 reads, 0.031 sec, 1428.8 kb/call avg, 15.6 msec/call avg
total 11 writes, 0.032 sec, 671.6 kb/call avg, 2.9 msec/call avg
[root@localhost sphinx]#
出现以上代表已经索引成功,若不成功的话请根据提示的错误修改配置文件,或到这里提问,我看到后会尽快解决
4.应用
4.1 在CLI上测试
在上一步中,我们建立了索引,现在我们对刚建立的索引进行测试。测试有两种方式:CLI端和API调用
在CLI端上命令测试是使用sphinx自带的搜索命令:search
###### 在article索引上检索 “北京”关键词 ########
[root@localhost sphinx]# bin/search -c etc/sphinx.conf 北京
Sphinx 0.9.9-release (r2117)
Copyright (c) 2001-2009, Andrew Aksyonoff
using config file ‘etc/sphinx.conf’…
index ‘article’: query ‘北京 ‘: returned 995 matches of 995 total in 0.008 sec
displaying matches:
1. document=76, weight=2, cat_id=1, member_id=2, created=Sat Jan 23 19:05:09 2010
id=76
title=??????????
cat_id=1
member_id=2
content=????????????????????????????????
created=1264244709
2. document=85, weight=2, cat_id=1, member_id=2, created=Sat Jan 23 19:05:09 2010
id=85
title=????????????
cat_id=1
member_id=2
content=????????
created=1264244709
…..这里省略….
20. document=17, weight=1, cat_id=1, member_id=2, created=Sat Jan 23 19:05:09 2010
id=17
title=????????????
cat_id=1
member_id=2
content=??????????????????????????????????????????????????????????
created=1264244709
words:
1. ‘北京’: 995 documents, 999 hits
至此,可以看到,我们已经检索出所有有关“北京”的信息
注意:这里我使用的是putty的客户端,在客户端编码设置的是utf-8,这个是测试的前提条件
4.2 API调用
在本例中,我使用PHP的api来测试,在测试前,先启动sphinx服务进程,并对centos的防火墙做好9312端口的开放
[root@localhost sphinx]# bin/searchd -c etc/sphinx.conf & ### 使sphinx在后台运行
[1] 5759
[root@localhost sphinx]# Sphinx 0.9.9-release (r2117)
Copyright (c) 2001-2009, Andrew Aksyonoff
using config file ‘etc/sphinx.conf’…
listening on all interfaces, port=9312
[1] Done bin/searchd -c etc/sphinx.conf
php测试代码:
SetServer(’192.168.1.150′, 9312); //注意这里的主机
#$cl->SetMatchMode(SPH_MATCH_EXTENDED); //使用多字段模式
//dump($cl);
$index=”article”;
$res = $cl->Query($keyword, $index);
$err = $cl->GetLastError();
dump($res);
function dump($var)
{
echo ‘
';var_dump($var);echo '
‘;
}
?>
检索“北京”dump后的结果是如下:
array(10) {
["error"]=>
string(0) “”
["warning"]=>
string(0) “”
["status"]=>
int(0)
["fields"]=>
array(2) {
[0]=>
string(5) “title”
[1]=>
string(7) “content”
}
["attrs"]=>
array(3) {
["cat_id"]=>
int(1)
["member_id"]=>
int(1)
["created"]=>
int(2)
}
["matches"]=>
array(20) {
[76]=>
array(2) {
["weight"]=>
string(1) “2″
["attrs"]=>
array(3) {
["cat_id"]=>
string(1) “1″
["member_id"]=>
string(1) “2″
["created"]=>
string(10) “1264244709″
}
}
…..这里省略…..
[17]=>
array(2) {
["weight"]=>
string(1) “1″
["attrs"]=>
array(3) {
["cat_id"]=>
string(1) “1″
["member_id"]=>
string(1) “2″
["created"]=>
string(10) “1264244709″
}
}
}
["total"]=>
string(3) “995″
["total_found"]=>
string(3) “995″
["time"]=>
string(5) “0.008″
["words"]=>
array(1) {
["北京"]=>
array(2) {
["docs"]=>
string(3) “995″
["hits"]=>
string(3) “999″
}
}
}
至此PHP已可调用出结果!
think php3.2怎么实现sphinx搜索
今天开始通过php程序使用sphinx搜索,以后做为记录
1.启动sphinx服务
/usr/local/coreseek/bin/searchd 其中几个参数可以通过 -h查看
-c, -config 指定coreseek中的配置文件(默认为csft.conf),位置为/usr/lcoal/coreseek/etc/中
–stop 用来停掉 searchd,使用csft.conf中所指定的PID文件,因此您可能还需要用
–config选项来确认searchd使用哪个配置文件。
值得 注意的是,调用 –stop 会确保用 UpdateAttributes() 对索引进行的更动会反应到实际的索引文件中去。示例: $ searchd –config /usr/lcoal/coreseek/etc/csft.conf –stop
–status 用来查询运行中的searchd实例的状态,使用指定的(也可以不指定,使用默认)配置文件中描述的连接参数。它通过配置好的第一个UNIX套接字或 TCP端口与运行中的实例连接。一旦连接成功,它就查询一系列状态和性能计数器的值并把这些数据打印出来。在应用程序中,可以用Status() API调用来访问相同的这些计数器
具体可以参考:参数说明
2.php加载sphinx模块,要想在php中使用sphinx一般有两种方式
2.1 加载sphinx模块
2.2 引入sphinxapi类(/home/book/Downloads/sphinx/coreseek-3.2.14/csft-3.2.14/api/目录中) 考虑到每个使用sphinx的php文件都得引入sphinxapi类,为了方便与学习,尝试用加载模块的办法。
步骤一 wget http://pecl.php.net/get/sphinx-1.1.0.tgz
步骤二 tar zxf sphinx-1.1.0.tgz cd sphinx-1.1.0 /usr/local/php/bin/phpize (生成config文件) ./configure –with-php-config=/usr/local/php/bin/php-config 提示出错 checking for libsphinxclient headers in default path …… 找到libsphinxclient 在之前的 /home/book/Downloads/sphinx/coreseek-3.2.14/csft-3.2.14/api/目录下 进入相关目录安装 ./configure make && make install 安装完 libsphinxclient 然后继续安装sphinx扩展
sphinx搜索:怎样避免关键词被拆开匹配
我也懊恼这个问题,正在寻找途径中,不过我有个方案,那就是,已经从大量的数据中筛选出来以后,获取到了主键,说不定筛选出来的只有小小的几千上万条信息,然后二次查询的时候 再用关键字进行筛选一次,Sphinx 我也是刚开始接触,还在探索中,如果你有直接在 Sphinx 上的解决方案了,麻烦你回来告诉我一声,谢谢。。。MySQL 5.7 以上版本的内置 fulltext 索引听说也是蛮快的,我试了一下 也是很快,只是我数据库上的数据量不是很大,虽然 insert into table select 。。。了三四次以后 ,表里已经有几百万条数据,但是重复率有点多,而且 content 里的内容 只是copy 了 好几次 title 的 内容 ,经过我目前为止的测试 我觉得 MySQL 内置插件 比Sphinx 的数据精准好多,而且 貌似比 Sphinx 还快。。。
coreseek中D:\coreseek>bin\search -c etc\csft_mysql.conf -a document
有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。1. check table 和 repair table登陆mysql 终端:mysql -uxxxxx -p dbnamecheck table tabTest;如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:repair table tabTest;进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。2. myisamchk, isamchk其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:myisamchk tablename.MYI进行检测,如果需要修复的话,可以使用:myisamchk -of tablename.MYI关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。-----------------------------另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)
php用coreseek调用mysql数据进行搜索,输出结果的分页问题
对于分页,需要设置2个变量
$page=empty($_GET['page']) ? 1 : (int)$_GET['page'];//当前第几页
$prepage=5;//每页显示几条
还有点,因为你是post方式提交,所以在上一页和下一页的按钮上需要填写传递的参数
并且在判断keyword变量需要判断post和get2个方式
我就重写PHP这部分
<?php
include("sphinxapi.php");
//分页所需参数
$page=empty($_GET['page']) ? 1 : (int)$_GET['page'];//当前第几页
$prepage=5;//每页显示几条
//上一页下一页的传递需要保证变量有效
//复杂点可以通过判断$_POST['word']来判断是否是第一次提交等等,就看你自己的需要了
$keyword=empty($_POST['word']) ? $_GET['keyword'] : $_POST['word'];
$sphinx= new SphinxClient();
$sphinx->SetServer("localhost",9312);
$sphinx->SetMatchMode(SPH_MATCH_ANY);
$sphinx->SetLimits(($page-1)*$prepage,$prepage);//传递当前页面所需的数据条数的参数
$result=$sphinx->query("$keyword","*");
if($result['total']==0){
echo '没有结果,请重新搜索';
exit;
}
echo"";
print_r($result);
echo"";
if($page >1) echo '上一页
';
if($result['total']>($page*$prepage)) echo '下一页
';
?>
php windows下怎么安装sphinx,安装后又怎么使用
1、下载,我这里下的是“Win64 binaries w/MySQL+PgSQL+libstemmer+id64 support”,下载后文件名:sphinx-2.0.6-release-win64-id64-full.zip;
2、将其解压到D: \ sphinx,并在D:\sphinx下新建目录data(用来存放索引文件)与log(用来存放日志文件);
3、将D:\sphinx\sphinx.conf.in复制到D:\sphinx\bin\sphinx.conf.in,并重命名为sphinx.conf;
4、修改 D:\sphinx\bin\sphinx.conf 如下:
4.1、搜索source src1修改{...}中的内容
# 使用的数据库类型
type = mysql
# 服务器
sql_host = localhost
# 数据库登录名
sql_user = root
# 数据库登录密码
sql_pass = root
# 操作的数据库名称
sql_db = test
# 数据库服务器端口
sql_port = 3306
# 设置编码,如果用的是utf-8编码
sql_query_pre = SET NAMES utf-8
(以上7条前如有#将其删除)
4.2、搜索index test1修改{...}中的内容
# 放索引的目录
path = D:/sphinx/data/
# 编码
charset_type = utf-8
# 指定utf-8编码表
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
# 简单分词,只有0和1,需要搜索中文必须置1
ngram_len = 1
# 需要分词的字符,搜索中文时必须
ngram_chars = U+3000..U+2FA1F
(以上5条前如有#将其删除)
5、导入测试数据将D:\sphinx\example.sql中语句执行到test数据库中,注意:test数据库创建时需要指定为utf-8格式;
6、打开cmd窗口,进入目录D:\sphinx\bin;
7、建立索引,执行indexer.exe test1,test1即为sphinx.conf中index test1
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphin
using config file './sphinx.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 222 bytes
total 0.019 sec, 11252 bytes/sec, 202.74 docs/sec
total 2 reads, 0.000 sec, 0.2 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
成功...
8、搜索'test',执行search.exe test
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file './sphinx.conf'...
index 'test1': query 'test ': returned 3 matches of 3 total in 0.000 sec
displaying matches:
1. document=1, weight=2421, group_id=1, date_added=Tue Feb 26 10:25:31 2013
id=1
group_id=1
group_id2=5
date_added=2013-02-26 10:25:31
title=test one
content=this is my test document number one. also checking search within
phrases.
2. document=2, weight=1442, group_id=3, date_added=Tue Feb 26 10:25:31 2013
id=2
group_id=3
group_id2=6
date_added=2013-02-26 10:25:31
title= ????
content=this is my test document number two ???????
3. document=4, weight=1442, group_id=2, date_added=Tue Feb 26 10:25:31 2013
id=4
group_id=2
group_id2=8
date_added=2013-02-26 10:25:31
title=doc number four
content=this is to test groups
words:
1. 'test': 3 documents, 4 hits
index 'test1stemmed': search error: failed to open D:/sphinx/data/test1stemmed.s
ph: No such file or directory.
最后面的一句error可忽略;
9、搜索中文,首先将数据库中的内容update含有中文,执行sql语句:
UPDATE documents SET title='中文', content='this is my test document number one. also checking search within phrases.含有中文。' WHERE id=1;
UPDATE documents SET title='中文标题', content='this is my test document number one. also checking search within phrases.含有中文内容。' WHERE id=2;
UPDATE documents SET title='中文标题测试', content='this is my test document number one. also checking search within phrases.含有中文内容。' WHERE id=3;
重新建立索引(执行第7步);
然后执行search.exe 中文
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file './sphinx.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 349 bytes
total 0.025 sec, 13808 bytes/sec, 158.26 docs/sec
total 2 reads, 0.000 sec, 0.3 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.2 kb/call avg, 0.0 msec/call avg
D:\sphinx\bin>search.exe 中文
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file './sphinx.conf'...
index 'test1': query '中文 ': returned 0 matches of 0 total in 0.000 sec
words:
index 'test1stemmed': search error: failed to open D:/sphinx/data/test1stemmed.s
ph: No such file or directory.
没有搜索到,因为windows命令行中的中文时GBK编码格式,所以没有匹配内容。我们可以使用PHP程序来试试;
10、进入D:\sphinx\api\目录,可以发现sphinx支持php、java、ruby调用,并提供对应的test例子,这里我们使用php来操作,首先将api复制到D:\www\下并重命名为sphinxapi,因为我本机上apache的web目录为D:\www,在D:\www\sphinxapi\下新建search.php,内容为:
<?php
require 'sphinxapi.php';
$s = new SphinxClient();
$s->SetServer('localhost', 9312);
$result = $s->Query('中国');
print_r($result);
echo '
';
$result = $s->Query('中文');
print_r($result);
?>
然后回到cmd命令行中,开启sphinx服务,执行searchd.exe(这个必须要执行的)
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file './sphinx.conf'...
WARNING: compat_sphinxql_magics=1 is deprecated; please update your application
and config
WARNING: preopen_indexes=1 has no effect with seamless_rotate=0
listening on all interfaces, port=9312
listening on all interfaces, port=9306
precaching index 'test1'
precaching index 'test1stemmed'
WARNING: index 'test1stemmed': preload: failed to open D:/sphinx/data/test1stemm
ed.sph: No such file or directory; NOT SERVING
precaching index 'rt'
WARNING: index 'rt': preload: failed to open @CONFDIR@/data/rt.lock: No such fil
e or directory; NOT SERVING
precached 3 indexes in 0.018 sec
成功...
然后在浏览器中执行http://localhost/sphinxapi/search.php,打印出来的数组结果可以很清晰的看见搜索的结果比对。。。
11、至此sphinx在windows下的简单安装与使用就完成了。
复杂的表格数据比对问题~高分悬赏~急
打开两个Excel文档。数据都在里面的Sheet1,第一行是表头,数据都从第二行起。
身份证没有重复的,就以身份证作为匹配条件。假设,身份证都在B列。
在《高考》工作簿里面的Sheet1C2输入
=IF(COUNTIF('[会考.xls]Sheet1'!B:B,B2)>0,"参加","")
回车并向下填充。
如果还要列姓名(A列)作为匹配条件也行。公式改为:
=IF(SUMPRODUCT(('[会考.xls]Sheet1'!A$2:A$14771=A2)*('[会考.xls]Sheet1'!B$2:B$14771=B2))>0,"参加","")
如果是2007及其以上版本,公式可以简化:
=IF(COUNTIFS('[会考.xls]Sheet1'!A:A,A2,'[会考.xls]Sheet1'!B:B,B2)>0,"参加","")