2 编译和安装
tar -zxvf sphinx-0.9.9.tar.gz
cd /lamp/sphinx-0.9.9
编译时需要引用mysql
./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql
make && make install
2 php连接使用sphinx
方法一
全php加载sphinx模块
下载php的sphinx模块
wget http://pecl.php.net/get/sphinx-1.1.0.tgz
tar zxf sphinx-1.1.0.tgz
cd /lamp/sphinx-1.1.0
都是通过php的phpize命令来加载模块
phpize用于生成一个configure的脚本用来编译
/usr/local/php/bin/phpize
编译后生成.so文件
./configure --with-php-conf=/usr/local/php/bin/php-conf
默认会出现error, libsphinxclient找不到
先要编译一下libsphinxclient
cd /coreseek-3.2.14/csft-3.2.14/api/libsphinxclient
./configure
make && make install
在编译模块源码生成.so文件
cd /lamp/sphinx-1.1.0
./configure --with-php-conf=/usr/local/php/bin/php-config --with-shpinx
make && make install
编译到php的动态库文件目录, php.ini文件会加载这些动态库
ls /usr/local/php//lib/php/extensions/no-debug-non-zts-20060613
可以看到一个sphinx.so文件生成
(还可以看到pdo_mysql.so, memcache.so等文件)
vi /usr/local/php/etc/php.ini
extension=sphinx.so
重起apache
/usr/local/apache2/bin/apachectl restart
cd /usr/local/apache2/htdocs/
vi index.php
phpinfo();
访问
192.168.10.1
看到sphinx已经被支持
然后php手册里面的sphinx命令可以使用
方法二
使用api类连接sphinx
cp /lamp/coreseek-3.2.14/csft-3.2.14/api/sphinxapi.php /usr/local/apache2/htdocs/
在所有php页面中包含
include 'sphinxapi.php';
ps -ef|grep httpd可以看到httpd进程目前的执行用户是daemon
而我们在windows这里用apache用户放入的新文件和文件夹
在linux里面,apache服务器运行时,使用的是daemon用户来执行
这个用户对这些新文件是没有权限的
而对于apache服务器使用daemon用户生成的文件,smb用户也没有权限
所以我们需要把执行者变成apache用户
vi /usr/local/apache2/etc/httpd.conf
User apache
Group apache
//匹配模式,还有SPH_MATCH_ALL表示不拆词
//SPH_MATCH_ANY表示拆词
$sphinx->SetMatchMode(SPH_MATCH_ANY);
//sphinx->setLimits(0,0);
//后面参数是数据源索引,*表示在所有索引中搜索
//结果中包含了mysql表中命中的记录id
//然后就可以通过id,找到这条记录
//比如select * from post where id in (1,2);
$result=$sphinx->query("$keyword", "*");
//echo "
帖子表
mysql的unsigned表示禁用负值
只能用在整形
drop table post;
create table post(
id int unsigned auto_increment primary key,
title varchar(254),
content text);
insert into post(title,content) values("linux1","content11111");
insert into post(title,content) values("php1","php1111");
当有了新记录
insert into post(title,content) values("linux2","content2222");
insert into post(title,content) values("php2","php2222");
要么再运行./indexer -all来读取main索引
要么就要当成增量来处理
尽量做到实时索引
1 创建一个计数器
数据库中增加计数器,记录将文档分为两个文档id
每次重新构建主索引时,更新这个表
create table sph_counter(counter_id int unsigned auto_increment primary key, max_doc_id int not null);
每进行一次主索引,就触发更改id成主索引id最大值
表里只一行数据,id永远是1
2 再次修改配置文件
主数据源,继承数据源,主索引,继承索引(增量索引)
主数据源里面需要把要查询的语句修改
主数据源里的数据都是小于等于max_doc_id
vi /usr/local/coreseek/etc/csft.conf
source main{
sql_query_pre=REPLACE INTO sph_counter SELECT 1, MAX(id) FROM post
sql_query=select id, title,content from post where id<=(select max_doc_id from sph_counter where counter_id=1)
}
增量数据源,继承主数据源
sql的检索字段名一定要和主里面一样
source delta:main{
sql_query_pre=set names utf8
sql_query=select id, title, content from post where id > (select max_doc_id from sph_counter where counter_id=1)
}
主索引不用变,记得只要修改索引保存位置path到coreseek下,中文分词
Index main{
source=main
path=/usr/local/coreseek/var/data/main
。。。。。。
}
增量索引
index delta:main{
source=delta
path=/usr/local/coreseek/var/data/delta
}
分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流。
1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法:
public in
/*
*使用对象类型
*/
--建立和使用简单对象类型
--对象类型包括对象类型规范和对象类型体两部分。
--建立和使用不包含任何方法的对象类型
CREATE OR REPLACE TYPE person_typ1 as OBJECT(
name varchar2(10),gender varchar2(4),birthdate date
);
drop type p
what 什么
your 你
name 名字
my 我的
am 是
one 一
two 二
three 三
four 四
five 五
class 班级,课
six 六
seven 七
eight 八
nince 九
ten 十
zero 零
how 怎样
old 老的
eleven 十一
twelve 十二
thirteen
spring security 3中推荐使用BCrypt算法加密密码了,以前使用的是md5,
Md5PasswordEncoder 和 ShaPasswordEncoder,现在不推荐了,推荐用bcrpt
Bcrpt中的salt可以是随机的,比如:
int i = 0;
while (i < 10) {
String password = "1234
1.前言。
如题。
2.代码
(1)单表查重复数据,根据a分组
SELECT m.a,m.b, INNER JOIN (select a,b,COUNT(*) AS rank FROM test.`A` A GROUP BY a HAVING rank>1 )k ON m.a=k.a
(2)多表查询 ,
使用改为le