рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ
рд╕реНрдЯреЗрдорд╛рдЗрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ SQLite рдХреЛрдб рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ OS Ubuntu 11.10 рдореЗрдВ рдХреА рдЧрдИрдВред
рд╕рдорд╕реНрдпрд╛
Fts3 SQLite рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдЯреЗрдорд░ рд╣реИ рдЬреЛ
рдкреЛрд░реНрдЯрд░ рдХреЗ рд╕реНрдЯреЗрдорд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реВрд╕реА рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред рдпрд╛рдиреА 'рд╣реЛрдЯрд▓' рд╢рдмреНрдж рдХреЗ рд▓рд┐рдП MATCH рдХреЛ 'рд╣реЛрдЯрд▓' рд╢рдмреНрдж рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдорд┐рд▓реЗрдВрдЧреЗ, рдЖрджрд┐ред
рд╕рдВрдХрд▓рди рдХреА рддреИрдпрд╛рд░реА
рдХреНрдпрд╛ рдЬрд░реВрд░рдд рд╣реИ?
- рднрдВрдбрд╛рд░ рд╕реЗ sqlite3 рд╕реНрд░реЛрдд;
- рд╣рдорд╛рд░реА рд╕реА-рднрд╛рд╖рд╛ рд╕реНрдЯреЗрдорд░ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ);
- рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реАрдбрд▓рд╛рдЗрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рд▓рд┐рдмреНрд░реЗрдбрд▓рд╛рдЗрди), рдпрджрд┐ рдЖрдкрдХреЛ рдХрдВрд╕реЛрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХрдорд╛рдВрдб рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣ рдЖрдЧреЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ 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 рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред
- рдЪрд░ LIBOBJS0 рдореЗрдВ fts3_porter_ext.lo рд╕реНрдЯреЗрдорд░ рдЬреЛрдбрд╝реЗрдВ
- SRC рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ $ (TOP) /ext/fts3/fts3_porter_ext.c рдЬреЛрдбрд╝реЗрдВ
- рд╣рдо рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ fts3_porter_ext.lo:
fts3_porter_ext.lo: $(TOP)/ext/fts3/fts3_porter_ext.c $(HDR) $(EXTHDR)
$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)/ext/fts3/fts3_porter_ext.c
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 рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдРрд▓рд╛рди рдпрд╣ рднреА рд╕рдЪ рд╣реИ рдХрд┐ рдХрдВрд╕реЛрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╣рдорд╛рд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдЕрджреНрдпрддрди: рд╕рд╣реА рд▓рд┐рдВрдХ