meklētājs Sphinx

Aktivs 0 Atbildēt 926 Skati 2021-09-05 09:53:24 Web programmēš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 

                          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 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 ar paša veidotu esošo aizkomentēto krievu valodas charset_table iekš cofig. 

Piemēram šādi: charset_table = 0..9, A..Z->a..z, _, a..z, Lielais-burts->mazais-burts, mazais-burts,...

 kas izskatās kodā šādi: .... U+104->U+105, U+105,... un tā katru burtiņu, kuru vēlaties ievietot.

Piemērs:

              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

Vairāk info par charset unicode latviešu val. var iegūt - compart.com

Vārdu formas

Lai reģistrētu vārdu formas, piemēram, sarkans > sarkanā - ir jāizveido teksta dokuments wordforms.txt, kur katrā rindiņā norāda ko un uz ko  pārveido. Tālāk saiti uz šo dokumentu ievieto config failā.

Piemērs

wordforms.txt saturs:

    pastaiga > staigāt
    miegs > gulēt

saites izvietošana config failā.


    index test_db #indeksa nosaukums {....wordforms = /var/lib/sphinxsearch/data/wordforms.txt}


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


loading...