#indexer.sh shell script
#!/bin/bash
indexer --config /etc/sphinxsearch/sphinx.conf --all --rotate
#sphinx.conf
#!/usr/bin/php
#main root configuration of sphinx file
#
source root
{
type = mysql
sql_host = localhost
sql_user = db_user
sql_pass = db_pass
sql_port = 3306 # optional, default is 3306
sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
sql_query_pre = SET NAMES utf8
sql_query_pre = SET CHARACTER SET utf8
}
#read files from configuration folder to different indexes and sources
<?php
//scanfolder and list files to var
$files = scandir("/etc/sphinxsearch/index_conf/");
foreach($files as $key => $value)
{
if($value != "." && $value != ".." )
{
include("index_conf/$value");
}
}
?>
#set indexer memory
indexer
{
mem_limit = 512M
}
#set search deamon settings
searchd
{
listen = 9312
#listen = 9306:mysql41
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/query.log
read_timeout = 5
max_children = 30
pid_file = /var/run/searchd.pid
max_matches = 1000000
seamless_rotate = 1
preopen_indexes = 0
unlink_old = 1
workers = threads # for RT to work
binlog_path = /var/lib/sphinxsearch/data
}
//================= indexer file ==================
source src_name : root
{
#set database selection and query
sql_db = database
sql_query = \
SELECT id\
'c_a' AS index_id\
FROM table AS t1\
LEFT JOIN crimte_table AS t2 ON t1.type = t2.id \
WHERE \
t1.id <=(SELECT max_doc_id FROM sph_counter WHERE counter_id=1) \
GROUP BY t1.id
sql_field_string = index_id
sql_attr_uint = id
sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
sql_query_pre = SET NAMES utf8
sql_query_pre = SET CHARACTER SET utf8
sql_query_pre = REPLACE INTO sph_counter SELECT 1,MAX(id),MAX(updated) FROM table
}
#indexing case source
index src_name
{
source = src_name
path = /var/lib/sphinxsearch/data/src_name
docinfo = extern
charset_type = utf-8
charset_table = 0..9,U+41..U+5a->U+61..U+7a, U+61..U+7a, U+aa, U+b5, U+ba, \
U+c0..U+d6->U+e0..U+f6, U+d8..U+de->U+f8..U+fe, U+df..U+f6, U+f8..U+ff, U+100..U+12f/2, \
U+130->U+69, U+131, U+132..U+137/2, U+138, U+139..U+148/2, U+149, U+14a..U+177/2, \
U+178->U+ff, U+179..U+17e/2, U+17f..U+180, U+181->U+253, U+182..U+185/2, U+186->U+254, \
U+187..U+188/2, U+189..U+18a->U+256..U+257, U+18b..U+18c/2, U+18d, U+18e->U+1dd, \
U+18f->U+259, U+190->U+25b, U+191..U+192/2, U+193->U+260, U+194->U+263, U+195, \
U+196->U+269, U+197->U+268, U+198..U+199/2, U+19a..U+19b, U+19c->U+26f, U+19d->U+272, \
U+19e, U+19f->U+275, U+1a0..U+1a5/2, U+1a6->U+280, U+1a7..U+1a8/2, U+1a9->U+283, \
U+1aa..U+1ab, U+1ac..U+1ad/2, U+1ae->U+288, U+1af..U+1b0/2, U+1b1..U+1b2->U+28a..U+28b, \
U+1b3..U+1b6/2, U+1b7->U+292, U+1b8..U+1b9/2, U+1ba..U+1bb, U+1bc..U+1bd/2, U+1be..U+1c3, \
U+1c4->U+1c6, U+1c5..U+1c6/2, U+1c7->U+1c9, U+1c8..U+1c9/2, U+1ca->U+1cc, U+1cb..U+1dc/2, \
U+1dd, U+1de..U+1ef/2, U+1f0, U+1f1->U+1f3, U+1f2..U+1f5/2, U+1f6->U+195, U+1f7->U+1bf, \
U+1f8..U+21f/2, U+220->U+19e, U+221, U+222..U+233/2, U+234..U+23a, U+23b..U+23c/2, \
U+23d->U+19a, U+23e..U+240, U+241->U+294, U+250..U+2c1, U+2c6..U+2d1, U+2e0..U+2e4, \
U+2ee, U+37a, U+386..U+389->U+3ac..U+3af, U+38c..U+38e->U+3cc..U+3ce, U+390, \
U+391..U+3a1->U+3b1..U+3c1, U+3a3..U+3ab->U+3c3..U+3cb, U+3ac..U+3ce, U+3d0..U+3d7, \
U+3d8..U+3ef/2, U+3f0..U+3f3, U+3f4->U+3b8, U+3f5, U+3f7..U+3f8/2, U+3f9->U+3f2, \
U+3fa..U+3fb/2, U+3fc..U+3ff, U+400..U+40f->U+450..U+45f, U+410..U+42f->U+430..U+44f, \
U+430..U+45f, U+460..U+481/2, U+48a..U+4bf/2, U+4c0, U+4c1..U+4ce/2, U+4d0..U+4f9/2, \
U+500..U+50f/2, U+531..U+556->U+561..U+586, U+559, U+561..U+587, U+5d0..U+5ea, \
U+5f0..U+5f2, U+621..U+63a, U+640..U+64a, U+66e..U+66f, U+671..U+6d3, U+6d5, \
U+6e5..U+6e6, U+6ee..U+6ef, U+6fa..U+6fc, U+6ff, U+e01..U+e30, U+e32..U+e33, \
U+e40..U+e46, U+e81..U+e82, U+e84, U+e87..U+e88, U+e8a, U+e8d, U+e94..U+e97, \
U+e99..U+e9f, U+ea1..U+ea3, U+ea5, U+ea7, U+eaa..U+eab, U+ead..U+eb0, U+eb2..U+eb3, \
U+ebd, U+ec0..U+ec4, U+ec6, U+edc..U+edd, U+1000..U+1021, U+1023..U+1027, U+1029..U+102a, \
U+1050..U+1055, U+10a0..U+10c5->U+2d00..U+2d25, U+10d0..U+10fa, U+10fc, U+2d00..U+2d25, \
U+1d00..U+1dbf, U+1e00..U+1e95/2, U+1e96..U+1e9b, U+1ea0..U+1ef9/2, U+3005..U+3006, \
U+3031..U+3035, U+303b..U+303c, U+3041..U+3096, U+309d..U+309f, U+30a1..U+30fa, \
U+30fc..U+30ff, U+31f0..U+31ff
}
#delta data source and index
source src_name_delta : root
{
#set database selection and query
sql_db = database
sql_query = \
SELECT id, \
'c_a' AS index_id\
FROM table AS t1\
LEFT JOIN crimte_table AS t2 ON t1.type = t2.id \
WHERE \
( \
(t1.id > (SELECT max_doc_id FROM sph_counter WHERE counter_id =10)) \
OR (t1.updated > (SELECT updated FROM sph_counter WHERE counter_id=1)) \
) \
GROUP BY t1.id
sql_attr_uint = id
sql_field_string = id
sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
sql_query_pre = SET NAMES utf8
sql_query_pre = SET CHARACTER SET utf8
#set killlist not exclude from main index
sql_query_killlist = SELECT id FROM table WHERE \
updated > (SELECT updated FROM sph_counter WHERE counter_id=1)
}
#indexing case source
index src_name_delta
{
source = src_name_delta
path = /var/lib/sphinxsearch/data/src_name_delta
docinfo = extern
charset_type = utf-8
charset_table =..charset table as above
}
#indexer.sh
cat /etc/sphinxsearch/main_indexes.list | xargs indexer --config /etc/sphinxsearch/sphinx.conf --rotate
#main index (main_indexes.list)
src_name
#delta indexer
cat /etc/sphinxsearch/delta_indexes.list | xargs indexer --config /etc/sphinxsearch/sphinx.conf --rotate
#counter table (sph_counter)
counter_id (int), max_doc_id (int), updated (timestamp)
#api search
//set server
$this->sphinxclient->SetServer('localhost', '9312');
if($this->input->post("match_type") == 2)
{
$this->sphinxclient->SetMatchMode(SPH_MATCH_EXTENDED2);
}
else
{
$this->sphinxclient->SetMatchMode(SPH_MATCH_ANY);
}
$this->sphinxclient->SetRankingMode(SPH_RANK_PROXIMITY_BM25);
//$this->sphinxclient->SetRankingMode(SPH_RANK_WORDCOUNT);
$this->sphinxclient->setLimits($starting,$recpage,100000);
$keyword = $this->input->post("keyword");
$keyword = trim( html_entity_decode( $keyword, ENT_QUOTES, 'UTF-8') ) ;
$data['keyword'] = $keyword;
$valu = "";
$this->sphinxclient->resetGroupBy();
//$this->sphinxclient->SetSortMode(SPH_SORT_EXTENDED, "index_id ASC");
$this->sphinxclient->SetGroupBy("id",SPH_GROUPBY_ATTR);
$result = $this->sphinxclient->Query($keyword, $indexList);
if($result)
{
print_r($result);
}