2. Úvod
• Fulltextové hledání
• Linux daemon
• Hlednání
– TCP socket (9312)
– SphinxQL – odnož sql jazyka
– SphinxSE – ukladání indexu do samotné DB od 5.1
• API pro PHP, Perl, Ruby, Java
4. • První pole určuje identifikátor řádku
• Další pole sloupce pro hledání, pokud není určeno jinak
ID Pole1 Pole2 Pole3
1 Monitor Asus nejaka verze 100 Pobocka1 1
2 Asus Monitor verze 100 nejaka Pobocka2 0
3 Monitor Asus modra verze s puntíky Pobocka1 1
4 Monitor Asus modra verze s puntíky Pobocka2 1
5. Konfigurace - Source
source [jmeno_indexu]
{
type = mysql
sql_host = host
sql_user = user
sql_pass = password
sql_db= db
sql_port = 3306 # optional, default is 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, pole1, pole2, pole3 FROM tabulka;
sql_attr_uint = pole3
sql_query_info = SELECT id, pole1, pole2 FROM products WHERE id=$id
}
6. Konfigurace - Source
type - typ DB
sql_host , sql_user, sql_pass, sql_db, sql_port – pripojeni k DB
sql_query_pre – co provést před indexací
sql_query_post_index – co provést po indexaci
sql_query - dotaz k indexování
sql_attr_uint, sql_attr_bool, sql_attr_bigint, sql_attr_float – atributy k nastavení hledání
sql_query_info – pouze pro CLI
sql_ranged_throttle – pauza mezi generovanim SQL dotazu
8. Konfigurace - Index
source - zdroj dat indexu
path - kam uložit
enable_star - povolit wildcards
morphology - zda upravit tvar uložených slov (psi, pes => pes )
min_word_len - min. délka slova k indexaci
min_prefix_len - min. délka předpony slova pro indexaci
min_infix_len - zda indexovat části slova a jaký počet
stopwords - co neidexovat (stopwords = stopwords-cz.txt stopwords-en.txt)
wordforms - zkratky (core 2 duo > c2d, procesor > c2d, ...)
(wordforms = /usr/local/sphinx/data/wordforms.txt)
prefix_fields - pro které sloupce zpracovat předpony (prefix_fields = pole1, pole2)
infix_fields - pro které sloupce zpracovat části slov (infix_fields = pole1, pole2)
10. Hledání
ALL
• výchozí nastavení
• vrátí záznam pouze po shodě všech slov z předaného výrazu
• SPH_MATCH_ANY
ANY
• vrátí záznam při libovolné shodě z předaného výrazu
• SPH_MATCH_ALL
PHRASE
• Vrátí záznam při přesné schodě
• SPH_MATCH_PHRASE
11. Hledání
Boolean
• Vrátí záznamy vyhovující schodě předaným výrazem
• SPH_MATCH_BOOLEAN (&, |, - !)
• SELECT id, pole1, pole2 FROM tabulka
(nejaka | puntiky) – vrátí vše
(nejaka & puntiky) – nevratí nic
(monitor -pobocka1) – vrátí id 2,4
ID Pole1 Pole2 Pole3
1 Monitor Asus nejaka verze 100 Pobocka1 1
2 Asus Monitor verze 100 nejaka Pobocka2 0
3 Monitor Asus modra verze s puntíky Pobocka1 1
4 Monitor Asus modra verze s puntíky Pobocka2 1
12. Hledání
Extended
• Vrátí záznamy vyhovující schodě předaným výrazem
• SPH_MATCH_EXTENDED (&, |, - !) + plus „sphinx operatory“
• Více na http://sphinxsearch.com/docs/manual-1.10.html#extended-syntax
13. Váha(relevance),Třídění
Váha
• Záleží na módu hledání
– phrase rank
– statistical rank
• BOOLEAN - váha se neurčuje
• ALL, PHRASE – součet jednotlivých vah nalezenych slov
• ANY – stejně jako ALL ale navíc se bere v úvahu váha jednotlivých sloupců
• EXTENDED – podobně jako ANY, plus se bere v úvahu výsledek váha algoritmu BM25
Třídění
• Relevance
• Definovaného atributu
• Času
• Matematického výrazu
14. PHP API
• sphinxapi - třída dodaná autorem
– http://code.google.com/p/sphinxsearch/source/browse/trunk/api/?r=2014
– http://sphinxsearch.com/docs/manual-1.10.html#api-reference
• PECL – ShinxClient
– http://www.php.net/manual/en/class.sphinxclient.php
16. PHP API – příklad
• $result_ids = array_key($resultCode[“matches“]);
• $sql = “SELECT id,pole1,pole2 FROM tabulka WHERE id IN (“ . Implode(“,“, $result_ids) . “)“;
Pak další zpracování