drupal commerce + xunsearch 做出强大的中文搜索,共享自己的drupal模块出来,丢掉solr吧

March 11th, 2014 by 黎 浩江 12 comments »

今天旗下的http://www.anetb.com需要一个支持中文分词的搜索页,原drupal的太烂了,

我的做法是:结合xunsearch实现drupal commerce下的中文搜索

drupal.org官网的sandbox: https://drupal.org/sandbox/haojiang/2226967

drupal.org官网模块fullproject,正在申请:https://drupal.org/node/2234637

申请进度,要将这个列表处理完:http://pareview.sh/pareview/httpgitdrupalorgsandboxhaojiang2226967git

[drupal 7 私有模块下载页及测试页:]

我暂时没有做更详细的后台设置界面,目前正在努力完善search_api版

(1)search_api版:

有默认的search_api的管理界面,能实现清空、重建索引、创建字段索引,方便管理!

支持search_api的所有功能,能快速用代码定制,默认安装后支持“文章类型”的字段索引(facet功能)

也可以联系我帮你定制,例如分类、特定的CCK字段等(或者你看下面的开发过程,查看手动定制的方法)

http://drupalcode.org/sandbox/haojiang/2226967.git/tree

search_api版下载:http://www.trackself.com/wp-content/xunsearch.zip (尽量用下面的git下载最新版)

测试地址:http://xs.trackself.com/?q=testxunsearch&search_api_views_fulltext=1

开发过程:search api 开发与 xunsearch第三方搜索引擎结合

git repository:
http://git.drupal.org/sandbox/haojiang/2226967.git (尽量用git下载最新版)
OR
git clone –branch 7.x-1.x YOURNAME-IN-DRUPAL.ORG@git.drupal.org:sandbox/haojiang/2226967.git xunsearch

(2)hook_node版:

已经完善,估计没什么好改的了,但功能一般般,不支持facet,仅支持全文搜索:

hook版下载:http://www.trackself.com/wp-content/xunsearch-d7-commerce.tar ,

测试页: 可输入“奶粉”,我的站准备做这个,暂时数据还不多

测试页 :www.anetb.com/search/粉

[介绍]

xunsearch是一个不可多得的中文分词搜索引擎,安装简单、功能强大,是目前我测试过的几个搜索引擎中最好用的。

国外站做搜索,中文分词是一个严重的问题

说实话,用drupal很久了,drupal的大缺憾之一,也是搜索,接过很多商业站的单子,客户抱怨也在这里,英文还好,中文就是……

apache solr很烂,而且安装不是一般的复杂,我安装了N次,放弃!而且听说中文分词不是一般的复杂。

而模认的drupal search ,或者说commerce安装包自带的搜索也不咋的!

相对而言,xunsearch做得很好很强大,可惜的地方是xunsearch没有现成的drupal模块,

[安装xunsearch:]

1.安装xunsearch,不是一般的简单,会linux的就能安装成功

按着官网的http://www.xunsearch.com/doc/php/guide/start.installation 一步步做就是了

2.建立一个xunsearch的搜索数据库

直接复制官网的demo.ini数据库到同名目录,

centos 6默认安装后demo.ini在/usr/local/xunsearch/sdk/php/app/

直接复制demo.ini 为*.ini,上面的search_api版用d7.ini , hook_node版用commerce.ini版

下载文件中均有示例。

[search_api版的安装过程: ]

按search_api的标准做法啦,search_api创建搜索页,下面有个视频教程

http://prezi.com/usetpzmi1gk8/search-api-facet-api-panopoly-on-drupal-7/

即用views来做搜索,对views熟的话,很容易搞定,不熟的话看看上述的视频借鉴一下。

 

即首先建立searver让drupal认出xunseach,然后建立索引
然后建立views\block,或者用panel实现
下文是一个用panel实现的办法,用于普通的search_api的,完全适用于本文,将文中的server改成xunsearch即可

[hook_node版的安装过程: ]

直接安装好可,关键是上述xunseach安装要做好,ini文件名就得叫commerce,或者你自己改*.module将ini文件对应起来。

我暂时没有做后台管理界面

上述的压缩包内的tsearch文件夹是drupal 7 模块,可以放在sites/all/modules下

import.php  : 批量导入现有的drupal nodes  , 建议放在/demo/文件夹下,否则可能要改改第一行,这个文件最有用了,帮助你把旧的node、product全部导入xunsearch,马上就能搜索了

clear.php : 批量导入现有的drupal nodes  , 建议放在/demo/文件夹下,否则可能要改改第一行

search.php : 将搜索变为数据,方便我们调回drupal

安装模块后,直接就能用在drupal 7 + commerce上了

如果你不运行import.php的话,那么必须是新的node才有效!

[深圳drupal meetup上展示该模块的细节]

.依赖的模块:facet\views\search_api……

.安装、配置,依赖VIEWS

/usr/local/xunsearch/sdk/php/lib/XS.php

vi /usr/local/xunsearch/sdk/php/app/d7.ini

drush dis -y xunsearch && drush pm-uninstall -y xunsearch && drush en xunsearch -y

(searchApi的安装配置:http://prezi.com/usetpzmi1gk8/search-api-facet-api-panopoly-on-drupal-7/)

.延时的问题,大约10~15秒

.分词不完美的解决

.bugs needs to be fixed

.开发细节略带一提

[后续工作]

 我最近正在为这个模块制作管理界面,因为手头上正好有个commerce 大项目,所以上述两版本均会直接支持commerce

未来我会更新代码,详细请看下面的连接

http://www.trackself.com/archives/2539.html   有什么问题请到我博客留言或者加我们的群

good luck

更多drupal anywhere文章请看:drupal anywhere,drupal 6~8 快速上手文章总结

QQ群:227600605
关于drupal anywhere \ drupal commerce\ drupal crawler cms
email:lihaojiang_1@163.com
buy me a coffee:http://me.alipay.com/trackself

 

最新drupal性能总结:php5.5+Zend OPcache+memcached,block级别性能提升

January 5th, 2014 by 黎 浩江 2 comments »

drupal的性能一直是drupal的痛,不过,随着服务器软件的升级,这些缺点正在慢慢改善,

我发现最新的php5.5加上其默认的Zend OPcache(注意不是optimize, opcache据说是自带optimize功能的)后,drupal表现非常好

环境是:centos 6+ nginx+ apache+php5.5+Zend OPcache+mysql+memcached

drupal性能模块:authcache+memcache  (由于用了nginx做反向代理,我就不用boost模块了)

测试网站:http://anetb.trackself.com ,  drupal7+commerce

 drupal 目前最好的情况是挂在apache后面,因为drupal的.htaccess还没有很牛的人将之完成完全的nginx化,网上最厉害的版本(额,网址不知消失在某个角落了,不过很复杂,我是不打算用了……)
apache要做一个优化,使用google的pagespeed:不用在nginx上的原因是,pagespeed用在apache上更稳定,而且配置简单,安装完就OK
nginx做前端是必然的,这时要做静态化的话,不要用boost了,用nginx的proxy_cache.
php-fpm5.5+自带的zend opcache,这个情况下,php程序是跑得最快的,但杀内存

由于静态已经完全由nginx做了(drupal-URL要有规律些,这样你的nginx规则会很好做)

那么关键就是登陆的用户了

0.必然要打开drupal自带的几个cache,然后就是views的cache要打开,这是针对每个views的设置,然后是panel cache

如果还顶不住大并发访问,必须大改了,这时可以试试让drupal飞起来的性能总结——开发完博济站后的小总结,具体为
1.如果用了很多views,可以尝试将访问量巨大的views 的结构改改,hook_views
2.如果你能接受hack core的话,我经常用到的提高drupal性能的10个hack及代码—— 这些都能直接提速的,而且是明显的,当然,官网上有专门hack core提速的,你也可以参考他们的hack,好多啊,如果能接受hack core,性能飞起来绝对不是问题,不过升级……
3.如果用了很多的SQL查询(db_query),可以试试mysql的临时表,在我的博济站开发的过程中,的确帮我解决了校内大访问的问题
4.有这么大的访问,买服务器做负载、买CDN已经不成问题了

既往的drupal优化的文章:

0.Yum详细安装最新centos6.5+nginx1.4+php-fpm5.5+mysql (fastcgi),for drupal 8

1.drupal 优化

2.drupal性能:DRUPAL_BOOTSTRAP_DATABASE,drupal_bootstrap

3.我经常用到的提高drupal性能的10个hack及代码

4.性能无止境,nginx proxy_cache pagespeed

5.让drupal飞起来的性能总结——开发完博济站后的小总结

6.drupal anywhere: block级别的优化,hook_block_list

7.drupal anywhere : memcached    ,  有空测试 redis,据说可以替换memcached

8.drupal + authcache

9.drupal 性能定制篇:cache_get & cache_set

10.国外建议,当D7的时候,使用entity cache模块

 

QQ群:227600605
关于drupal anywhere \ drupal commerce\ drupal crawler cms
email:lihaojiang_1@163.com
buy me a coffee:http://me.alipay.com/trackself

[第三版]基于drupal的采集CMS,一起淘美金吧,alpha3,现支持php5.3,drupal crawler

January 28th, 2012 by 黎 浩江 158 comments »

drupal crawler

[介绍:]

这个是一个基于drupal的二次开发的CMS,主要用于采集和赚美金(人民币我是失败了):
1.可以采集明文的HTML.(藏在javascript里的东西应该是不行的).我主要用于采图片.
2.采集程序何其多,它的特色是完全基于PHP和drupal,直接能用在bluehost等便宜到死的主机上,不需要非常规的PHP插件.
3.并发爬行(一个个爬,等明年吧).bluehost的最大值是50并发,我设置了15个并发,不会让你被bluehost封机器的
4.对wordpress支持相当好,我指的是采集用wordpress做的站.我在做采集的时候发现80%的国外站点是用wordpress做的.
5.我在里面装上了很多drupal必须要用到的模块和帮你下载好了一些我必须用到的模块,你自己选择性安装,方便上手drupal
6.能并发下载图片.
7.能并发上传到picasa,我是穷人,所以得想尽办法省流量,流量是其次,bluehost限制了文件数量最大不超过15万张(15万张,几周就到了,我某个站似乎有70万的图片了).也是这一点,导致我赚不到人民币,万恶的GFW!

[下载:此为第三版,前两版我也没有备份]

php5.2版
下载程序请到:http://www.trackself.com/wp-content/x.zip (开源后可能放在GOOGLECODE上,请关注我的博客)
下载模块请到:http://www.trackself.com/wp-content/modules.zip (内附四个模块,直接放到sites/all/modules中即可)

php5.2装Zend Optimizer
php5.3版(由于我没有5.3的环境,如有问题,请直接回复)
下载程序请到:http://www.trackself.com/wp-content/x.5.3.zip
下载模块请到:http://www.trackself.com/wp-content/modules.5.3.zip

php5.3装Zend Guard Loader,php5.3 Zend Guard Loader替代Zend Optimizer

 

[升级]:   可以整站复盖,也可以下载模块后放到sites/all/modules中.

升级原因:2013-2-3,增加了php5.3的支持,代码没改,修正了过期的bug,当我博士毕业后(2013-6),会有新的版本的,i promise,到时会有一个很爽的界面,如果drupal8出了的话,我会直接上D8,由于d7性能太差模块太少的原因,该软件不会有D7的版本。

demo:http://oddsfun.com

by:http://www.trackself.com,

你们要支持这个程序的话: buy me a coffee:  http://me.alipay.com/trackself

请加QQ群:227600605,关于drupal anywhere 和 drupal crawler 这个CMS的

 

» Read more: [第三版]基于drupal的采集CMS,一起淘美金吧,alpha3,现支持php5.3,drupal crawler

nginx下drupal的配置

November 13th, 2014 by 黎 浩江 No comments »

某个drupal网站的conf文件内容如下,我喜欢保存在/etc/nginx/conf.d/xxx.conf下

server {

####root and domain#####
server_name xxxxx.com;
root /srv/www/xxxx.com/public_html;

##log####
access_log /var/log/nginx/xxx.access.log;
error_log /var/log/nginx/xxxx.error.log info;

###我将常规的drupal配置都保存下来了####
include /etc/nginx/drupalcommon.conf;
}

下面是drupalcommon.conf的具体配置,我喜欢保存在/etc/nginx/drupalcommon.conf,内容很长

index index.php index.html index.htm;

location = /favicon.ico {
log_not_found off;
access_log off;
}

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

# This matters if you use drush
location = /backup {
deny all;
}

# Very rarely should these ever be accessed outside of your lan
location ~* \.(txt|log)$ {
allow 127.0.0.1;
deny all;
}

location ~ \..*/.*\.php {
return 403;

}

location / {

# This is cool because no php is touched for static content

try_files $uri $uri/ @rewrite;

expires max;

}

location @rewrite {

# Some modules enforce no slash (/) at the end of the URL

# Else this rewrite block wouldn't be needed (GlobalRedirect)

rewrite ^/(.*)$ /index.php?q=$1;

}

location ~ \.php$ {

include /etc/nginx/phpfpmcommon.conf;

}

注意到最后一行,phpfpmcommon.conf , 告诉nginx,遇到php时怎么处理,我喜欢php-fpm的模式,下面是内容

fastcgi_index index.php;
include /etc/nginx/fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
#fastcgi_pass unix:/var/run/php-fpm.sock;

#注意到,我用的是phpfpm当中的ip端口模式,这种模式更加适用于多机器,如果你是单机,传说中socket更快
#你要改成socket很简单,看这里修改的做法:http://www.trackself.com/archives/2429.html
fastcgi_pass 127.0.0.1:9000;

安全地清空comment,drupal

October 17th, 2014 by 黎 浩江 No comments »

由于设计上的错误,打开了annoymous评论功能,导致某站大量垃圾comment

7GB垃圾comment

API清空都太慢,想直接mysql命令干掉所有comment表。

1.备份,由于这些comment表太大,一般要分开备份。

即分开两步备份,先备份将要清空的表:

mysqldump -uroot -pYourPassword DrupalDatabaseName –ignore-table=commerce.cache_field  –ignore-table=commerce.comment –ignore-table=commerce.field_data_comment_body  –ignore-table=commerce.field_revision_comment_body >  db.ignore_comment.sql

再备份上述4个几GB大小的表

mysqldump -uroot -pYourPassword  DrupalDatabaseName cache_field > cache_field.sql

mysqldump -uroot -pYourPassword  DrupalDatabaseName comment > comment.sql

mysqldump -uroot -pYourPassword  DrupalDatabaseName field_data_comment_body > field_data_comment_body.sql

mysqldump -uroot -pYourPassword  DrupalDatabaseName field_revision_comment_body field_revision_comment_body.sql

 

2.  清空他们

TRUNCATE TABLE comments

TRUNCATE TABLE field_data_comment_body

UPDATE node_comment_statistics SET comment_count = 0

TRUNCATE TABLE field_revision_comment_body

 

3.安全起见,清空后,再备份一次以防万一,因为清空没改变表结构,理论上不会出大问题,出BUG后可以虚拟一些数据进上面清空过的表

1 2 3 4 5 6 7 8 9 10 11 12 ... 101 »