рд░реВрд╕реА рд╢рдмреНрджреЛрдВ рдХрд╛ рдПрдХреАрдХрд░рдг fts3 SQLite рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реНрдЯреЗрдорд┐рдВрдЧ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╕реНрдЯреЗрдорд╛рдЗрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ SQLite рдХреЛрдб рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ OS Ubuntu 11.10 рдореЗрдВ рдХреА рдЧрдИрдВред

рд╕рдорд╕реНрдпрд╛


Fts3 SQLite рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдЯреЗрдорд░ рд╣реИ рдЬреЛ рдкреЛрд░реНрдЯрд░ рдХреЗ рд╕реНрдЯреЗрдорд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реВрд╕реА рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред рдпрд╛рдиреА 'рд╣реЛрдЯрд▓' рд╢рдмреНрдж рдХреЗ рд▓рд┐рдП MATCH рдХреЛ 'рд╣реЛрдЯрд▓' рд╢рдмреНрдж рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдорд┐рд▓реЗрдВрдЧреЗ, рдЖрджрд┐ред

рд╕рдВрдХрд▓рди рдХреА рддреИрдпрд╛рд░реА


рдХреНрдпрд╛ рдЬрд░реВрд░рдд рд╣реИ?



рдпрд╣ рдЖрдЧреЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ sqlite3 рд╕реНрд░реЛрдд $ HOME / SQLite рдореЗрдВ рд╣реИрдВред

рд╕реНрдЯреАрдорд░ рдХреЛрдб

рд░реВрд╕реА рд╡рд░реНрдгреЛрдВ рдХреЛ UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧред
рд╕реНрдЯреАрдорд░ рд▓реИрдЯрд┐рди рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдЯ-рдЗрди рдкреЛрд░реНрдЯрд░ рд╕реНрдЯреАрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд░реВрд╕реА рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдХреЛрдб рдореВрд▓ рд░реВрдк рд╕реЗ C ++ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ SQLite рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдЗрд╕реЗ рд╕реА рднрд╛рд╖рд╛ рд╕рдВрдХрд▓рдХ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реБрдВрджрд░ рдФрд░ рд╕рдЦреНрдд рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ:
fts3_porter_ext.c
рд╣рдордиреЗ рдЕрдкрдиреЗ рд╕реНрдЯреЗрдорд░ рдХреЛ $ HOME / SQLite / ext / fts3 / fts3_porter_ext.c рдореЗрдВ рдбрд╛рд▓рд╛

рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрди

Makefile.in

рдлрд╛рдЗрд▓ рдХреЛ $ HOME / SQLite / Makefile.in рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред

fts3.c

$ HOME / SQLite / ext / fts3 / fts3.c рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝реЗрдВ
void sqlite3Fts3PorterTokenizerModule(sqlite3_tokenizer_module const**ppModule);

рдкрдВрдХреНрддрд┐
void sqlite3Fts3PorterTokenizerModule1(sqlite3_tokenizer_module const**ppModule);

рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж
sqlite3Fts3PorterTokenizerModule(&pPorter);

рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЬреЛрдбрд╝реЗрдВ
const sqlite3_tokenizer_module *pPorter1 = 0;
sqlite3Fts3PorterTokenizerModule1(&pPorter1);

рдЖрдЦрд┐рд░рдХрд╛рд░
|| sqlite3Fts3HashInsert(pHash, "porter", 7, (void *)pPorter)

рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЯреЛрдХрди рдХреЗ рд╣реИрд╢ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
|| sqlite3Fts3HashInsert(pHash, "russian", 8, (void *)pPorter1)

mkfts3amal.tcl

$ HOME / SQLite / ext / fts3 / mkfts3amal.tcl рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж
fts3_tokenizer1.c

рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
fts3_porter_ext.c

mksqlite3c.tcl

$ HOME / SQLite / рдЯреВрд▓ / mksqlite3c.tcl рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж
fts3_tokenizer1.c

рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
fts3_porter_ext.c


рд╕рдВрдХрд▓рди


рдЪрд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (--prefix = $ HOME рдХреЛ рдХреБрдЫ рдФрд░ рд╕реЗрдВрд╕ рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдкрде рд╣реЛрдЧрд╛)
cd $HOME/SQLite && mkdir build && cd build && ../configure --prefix=$HOME CFLAGS='-DSQLITE_SOUNDEX -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS' && make

рдЕрдм рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рд╕реНрдЯреЗрдордореАрдЯрд░ sqlite3.c рдореЗрдВ рд╣реИ
grep fts3_porter_ext.c sqlite3.c

рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:
/************** Begin file fts3_porter_ext.c *********************************/
/************** End of fts3_porter_ext.c *************************************/

рдЕрдм рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ sqlite3 рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
sudo make install


рдХреЗ рдЙрдкрдпреЛрдЧ


Fts3 рдЯреЗрдмрд▓ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рд╕реНрдЯреЗрдорд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣:
CREATE VIRTUAL TABLE tag_fti USING fts3(name, tokenize=russian);

рдЕрдм, tag_fti рдЯреЗрдмрд▓ рдкрд░ MATCH рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рд╕реНрдЯреЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкрд░рд┐рдгрд╛рдо


рд╣рдореЗрдВ 2 sqlite3.c рдФрд░ sqlite3.h рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓реАрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЙрдбреНрдпреВрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рдореЗрдВ рдПрдХ рдХрдВрд╕реЛрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗ fts3 рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдРрд▓рд╛рди рдпрд╣ рднреА рд╕рдЪ рд╣реИ рдХрд┐ рдХрдВрд╕реЛрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╣рдорд╛рд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдЕрджреНрдпрддрди: рд╕рд╣реА рд▓рд┐рдВрдХ

Source: https://habr.com/ru/post/In131265/


All Articles