meklētājs Sphinx

Neliels pārskats un ātra sphix palaišana uz linux debian10. 

Sphinks ir meklētāja dzinējs ar vairums iespējām, kuru izmanto lieliem web projektiem ar apjomīgām datubāzēm, lai ātri atlasītu vajadzīgos rezultātus no datubāzes. 

Instalēšana no konsoles.

Instalācija apt install sphinxsearch

konfigurācijas fails  /etc/sphinxsearch/sphinx.conf

faila saturs līdzīgi kā te: 

Konfigurē uz esošo pieprasijumu uz tabulu datu bāzē vai veido jaunu tabulu testam un attiecīgi norādīt uz viņu.

source src_test_db
{
 type = mysql
 sql_host = localhost
 sql_user = root
 sql_pass =
 sql_db = test_db
 sql_port = 3306 # optional, default is 3306
 sql_query =
 SELECT id, category_id, UNIX_TIMESTAMP(date_created) AS date_created, text
 FROM questions
 sql_attr_uint = category_id
 sql_attr_timestamp = date_created
 sql_field_string = text
 sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
    sql_query_pre = SET NAMES utf8
}
index test_db #indeksa nosaukums
{
 source = test_db #indeksa nosaukums
 path = /var/lib/sphinxsearch/data/index_test_db
 morphology = stem_enru
 html_strip = 1
 min_word_len = 2
 min_infix_len = 1
 index_exact_words = 1
 expand_keywords = 1
 #charset_table = 0..9, A..Z->a..z, a..z, (, ), {, }, [, ], $, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+401->U+0435, U+451->U+0435, U+2A, U+2D, U+00AB, U+00D7
}
indexer
{
 mem_limit = 256M
}
searchd
{
 listen = 127.0.0.1:9306:mysql41
 log = /var/lib/sphinxsearch/log/searchd.log
 query_log = /var/lib/sphinxsearch/log/query.log
 read_timeout = 5
 max_children = 30
 pid_file = /var/run/sphinxsearch/searchd.pid
 seamless_rotate = 1
 preopen_indexes = 1
 unlink_old = 1
 #workers = threads # for RT to work
 binlog_path = /var/lib/sphinxsearch/data
}

sistēmas restarts, indeks   

Tiek indeksēti rezultāti no norādītās datu bāzes laukiem.

                    systemctl restart sphinxsearch indexer --all --verbose 

Servisa palaišana

                    /usr/bin/searchd -c /etc/sphinxsearch/sphinx.conf

tests no konsoles

            mysql -h0 -P9306 
            SELECT id FROM tabula WHERE MATCH('meklējamais vārds'); SHOW META; 

tālāk no php var izmantot pieslēgumu portam 9306(vai citam, kas norādīts config) un veikt pieprasijumu nevis tabulai, bet indeksam un iegūt identifikātoru, piemēram: 

                    $link = mysqli_connect("localhost:9306", "Lietotājs", "", "indeksa nosaukums");$key=$_GET['sometext'];$n=0;$id = mysqli_query($link,"SELECT id FROM indeksa nosaukums WHERE MATCH('$key') LIMIT 500");foreach($id as $key=>$p){ $n++; if($n =='1'){  $ids .= $p['id']; } else {  $ids .= ", ".$p['id']; }

ar iegūtiem id veic pieprasijumu vajadzīgai tabulai: 

                     SELECT * FROM tabulas_nosaukums WHERE id IN ($ids);

datus apstrādā un parāda rezultātu.

Ja kādu iemeslu dēļ nestrādā labi utf-8, tad latviešu valodai var aizvietot esošo aizkomentēto krievu valodas charset_table iekš cofig.

        charset_table = 0..9, A..Z->a..z, _, a..z, U+104->U+105, U+105, U+10C->U+10D, U+10D,U+116->U+117, U+117, U+118->U+119, U+119, U+12E->U+12F, U+12F, U+160->U+161, U+161,U+16A->U+16B, U+16B, U+172->U+173, U+173, U+17D->U+17E, U+17E,U+410..U+42F->U+430..U+44F, U+430..U+44F


Sharing is caring, show love and share the thread with your friends.


loading...