This how-to is made on Centos6.7 64bit. It is a phpBB forum in Chinese with more than 680K posts. If I use phpBB native Fulltext or MySQL Fulltext search, the search tables are over 1.4GB. Too big. And it is very slow when do the search.
Now, my solution is use Sphinx Search Engine.
Step 1)
SSH to VPS as root
yum install sphinx
Step 2)
Sign in with Administrator account in phpBB 3.1.6, and sign in again to ACP
General >> Search settings
Choose Sphinx Fulltext from the Search backend list. Save.
Step 3)
In SSH window, edit /etc/sphinx/sphinx.conf
Add following into sphinx.conf to replace the original sample content. These content is copied from the Step 2 screen.
source source_phpbb_669b8066d06af641_main { type = mysql # mysql or pgsql sql_host = localhost # SQL server host sphinx connects to sql_user = [dbuser] sql_pass = [dbpassword] sql_db = fromchinatousa31x sql_port = # optional, default is 3306 for mysql and 5432 for pgsql sql_query_pre = SET NAMES 'utf8' sql_query_pre = UPDATE phpbb_sphinx SET max_doc_id = (SELECT MAX(post_id) FROM phpbb_posts) WHERE counter_id = 1 sql_query_range = SELECT MIN(post_id), MAX(post_id) FROM phpbb_posts sql_range_step = 5000 sql_query = SELECT \ p.post_id AS id, \ p.forum_id, \ p.topic_id, \ p.poster_id, \ p.post_visibility, \ CASE WHEN p.post_id = t.topic_first_post_id THEN 1 ELSE 0 END as topic_first_post, \ p.post_time, \ p.post_subject, \ p.post_subject as title, \ p.post_text as data, \ t.topic_last_post_time, \ 0 as deleted \ FROM phpbb_posts p, phpbb_topics t \ WHERE \ p.topic_id = t.topic_id \ AND p.post_id >= $start AND p.post_id <= $end sql_query_post = sql_query_post_index = UPDATE phpbb_sphinx SET max_doc_id = $maxid WHERE counter_id = 1 sql_query_info = SELECT * FROM phpbb_posts WHERE post_id = $id sql_attr_uint = forum_id sql_attr_uint = topic_id sql_attr_uint = poster_id sql_attr_uint = post_visibility sql_attr_bool = topic_first_post sql_attr_bool = deleted sql_attr_timestamp = post_time sql_attr_timestamp = topic_last_post_time sql_attr_string = post_subject } source source_phpbb_669b8066d06af641_delta : source_phpbb_669b8066d06af641_main { sql_query_pre = sql_query_range = sql_range_step = sql_query = SELECT \ p.post_id AS id, \ p.forum_id, \ p.topic_id, \ p.poster_id, \ p.post_visibility, \ CASE WHEN p.post_id = t.topic_first_post_id THEN 1 ELSE 0 END as topic_first_post, \ p.post_time, \ p.post_subject, \ p.post_subject as title, \ p.post_text as data, \ t.topic_last_post_time, \ 0 as deleted \ FROM phpbb_posts p, phpbb_topics t \ WHERE \ p.topic_id = t.topic_id \ AND p.post_id >= ( SELECT max_doc_id FROM phpbb_sphinx WHERE counter_id=1 ) } index index_phpbb_669b8066d06af641_main { path = /home/admin/sphinx-forum/index_phpbb_669b8066d06af641_main source = source_phpbb_669b8066d06af641_main docinfo = extern morphology = none stopwords = min_word_len = 2 charset_type = utf-8 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+4E00..U+9FFF min_prefix_len = 0 min_infix_len = 0 } index index_phpbb_669b8066d06af641_delta : index_phpbb_669b8066d06af641_main { path = /home/admin/sphinx-forum/index_phpbb_669b8066d06af641_delta source = source_phpbb_669b8066d06af641_delta } indexer { mem_limit = 40M } searchd { compat_sphinxql_magics = 0 listen = 127.0.0.1:9312 log = /home/admin/sphinx-forum/log/searchd.log query_log = /home/admin/sphinx-forum/log/sphinx-query.log read_timeout = 5 max_children = 30 pid_file = /home/admin/sphinx-forum/searchd.pid max_matches = 20000 binlog_path = /home/admin/sphinx-forum/ }
Do remember, to change the dbuser and dbpassword by your own MySQL user and password.
Step 4)
Create some folders, such as /home/admin/, /home/admin/sphinx-forum/, /home/admin/sphinx-forum/log/
Give 777 user rights to them
Step 5)
Go back to phpBB forum ACP
Maintenance >> Search index
Click Create index button of Sphinx Fulltext(active).
Step 6)
Enter following command into SSH window
indexer --all
Step 7)
Start Sphinx Engine service
service searchd start
Step 8)
Go to front of forum and do the search, it will come up very soon.
Step 9)
Add searchd into service with boot.
Other Step
I met the error, when I do the search
connection to localhost:9312 failed (errno=111, msg=Connection refused)
I check the port of searchd, it is correct.
Later I enter the 127.0.0.1 into Sphinx search daemon host field of Search settings of ACP.
Then problem was solved.