Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΏΠΎΠΈΡΠΊ
ΠΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠ°ΠΉΡΡ β Π±ΠΈΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΡΠ°ΠΉΡΡ β ΡΠ°ΡΡΠΎ ΡΠΈΠ»ΡΠ½ΠΎ Π½Π΅Π΄ΠΎΠΎΡΠ΅Π½Π΅Π½Π½Π°Ρ ΠΏΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π°Π΄Π°ΡΠ°. ΠΠΎΠΈΡΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π°Π±ΡΠΌ ΠΌΠ΅ΡΡΠΎΠΌ ΡΠ°ΠΉΡΠΎΠ² Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΠΎ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Ρ Π²ΠΈΠΆΡ ΡΡΡΠΎΠΊΡ ΠΏΠΎΠΈΡΠΊΠ°, Ρ ΠΌΠ΅Π½Ρ ΡΡΠ°Π·Ρ ΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠ΅Π΄Π²Π·ΡΡΠΎΠ΅ ΠΎΡΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠΎΡΡΠ΅Π³ΠΎ ΡΠΈΠ°ΡΠΊΠΎ. Π ΡΡΠΎΠ±Ρ Π»ΠΈΡΠ½ΠΈΠΉ ΡΠ°Π· Π½Π΅ ΡΠ°ΡΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ, Ρ ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅Π°Π΄ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ Π³ΡΠ³Π»Ρ ΠΈΠ»ΠΈ ΡΠ½Π΄Π΅ΠΊΡΡ ΠΈ Π±ΡΡΡΡΠΎ Π½Π°Ρ ΠΎΠΆΡ ΡΠΎ, ΡΡΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ. Π§ΡΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΊ-ΡΠΎ ΡΠ»ΡΡΡΠΈΡΡ ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ?
Π€ΠΎΡΠΌΠ° ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΡΠ°ΠΉΡΡ ΠΎΡ Π―Π½Π΄Π΅ΠΊΡΠ° ΠΈ ΠΡΠ³Π»Π°
ΠΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ°
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΠΈΠ· ΡΠ΅Π³ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΎΠ². Π ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΈΠ· Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² ΠΊΠ½ΠΈΠ³Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠ° ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠ° ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ Π½Π°ΡΠΊ ΠΠ³ΠΎΡΡ ΠΡΠΌΠ°Π½ΠΎΠ²Π°. (Π‘ΠΊΠ°ΠΆΡ ΠΏΠΎ ΡΠ΅ΠΊΡΠ΅ΡΡ, ΡΡΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ Π²ΠΈΠ΄Π΅Π» Π΅Ρ Π½Π° torrents.ru). ΠΡΠ΅ ΡΠ°ΠΊΡΠΎΡΡ ΡΡΠ»ΠΎΠ²Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π±ΠΈΡΡ Π½Π° ΡΡΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ: ΠΏΠΎΠ»Π½ΠΎΡΠ°, ΡΠΎΡΠ½ΠΎΡΡΡ ΠΈ ΡΠ°Π½ΠΆΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠΎΠ»Π½ΠΎΡΠ°
ΠΡΠΈΡΠΈΠ½Π° ΡΡΠΎΠ³ΠΎ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π° Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ°ΠΉΡΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠΈΡΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΠΎΠΈΡΠΊΠΎΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΎΠ±ΡΡΠ½ΠΎ Π²Π΅Π±ΠΌΠ°ΡΡΠ΅Ρ (ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ CMS) ΡΠ΅ΡΠ°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡΡ Π² ΠΠ ΡΠ°ΠΌΡΠ΅ Π²Π°ΠΆΠ½ΡΠ΅, Π° ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Π΄ΠΎΡΡΠΎΠΉΠ½Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Β«Π·Π° Π±ΠΎΡΡΠΎΠΌΒ» ΠΏΠΎΠΈΡΠΊΠ° ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Β«ΠΌΠ°Π»ΠΎΠ·Π½Π°ΡΠΈΠΌΡΠ΅Β» Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ Π²ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π»ΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΏΠΎΠΈΡΠΊΠ°, ΡΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Β«ΠΌΡΡΠΎΡΠ½ΡΡ Β» ΠΈ Π΄ΡΠ±Π»ΠΈΡΡΡΡΠΈΡ ΡΡ ΡΡΡΠ°Π½ΠΈΡ, ΡΡΠΎ ΡΠΎΠΆΠ΅ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π° Π»ΠΎΡΠ»ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
Π’ΠΎΡΠ½ΠΎΡΡΡ
Π’ΠΎΡΠ½ΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° β ΡΡΠΎ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠΌΡ Π·Π°ΠΏΡΠΎΡΡ. Π Π½Π΅Ρ Π²Ρ ΠΎΠ΄ΡΡ ΡΡΠ΅Ρ ΠΌΠΎΡΡΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΡΠ½ΡΡΠΈΠ΅ ΠΎΠΌΠΎΠ½ΠΈΠΌΠΈΠΈ, ΡΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΠΊ, ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠ°ΠΌ ΠΈ Π΄Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΡΠ΅Ρ Β«ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π³ΠΎΠ»ΠΎΠ² ΠΡΡΠ°Π²ΠΈΠ½Π°Β», ΡΠΎ ΡΡΠ½ΠΎ, ΡΡΠΎ Π³ΠΎΠ»ΠΎΠ²Ρ ΡΡΡ Π½ΠΈ ΠΏΡΠΈ ΡΠ΅ΠΌ, ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΡΠΎ Π·Π°Π±ΠΈΡΡΠ΅ Π³ΠΎΠ»Ρ. ΠΠΎΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠΌΠΎΠ½ΠΈΠΌΠΈΠΈ. ΠΠΎ ΡΡΠΎ Π²ΡΡΡΠΈΠΉ ΠΏΠΈΠ»ΠΎΡΠ°ΠΆ, Π° ΡΠ°ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅, ΡΡΠΎ Ρ ΠΎΡΠ΅Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ β ΡΡΠΎ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΡΠΎΡΠΌΠ°ΠΌ.
ΠΠ΅Π³Π°-Π£ΡΠ΅Π±Π½ΠΈΠΊ Flask, Π§Π°ΡΡΡ 10: ΠΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΏΠΎΠΈΡΠΊ
ΠΡΠΎ Π΄Π΅ΡΡΡΠ°Ρ ΡΡΠ°ΡΡΡ Π² ΡΠ΅ΡΠΈΠΈ, Π³Π΄Π΅ Ρ ΠΎΠΏΠΈΡΡΠ²Π°Ρ ΡΠ²ΠΎΠΉ ΠΎΠΏΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Python Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΈΠΊΡΠΎΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Flask.
ΠΡΠ°ΡΠΊΠΎΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ»ΡΡΡΠΈΠ»ΠΈ Π½Π°ΡΠΈ Π·Π°ΠΏΡΠΎΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»ΠΈ ΠΏΠΎΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ.
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½Π°ΡΠ΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅Π»ΡΡ. ΠΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠ°Π½ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ°.
ΠΠ»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ² Π²Π΅Π±-ΡΠ°ΠΉΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ Google, Bing, ΠΈ Ρ.ΠΏ. ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠΈΡΠΊΠ°. ΠΡΠΎ Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ°ΠΉΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΎΡΡΠΌ. Π Π½Π°ΡΠ΅ΠΌ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π±Π°Π·ΠΎΠ²Π°Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΡΡΠΎ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΠΎΡΡ, Π° Π½Π΅ ΡΠ΅Π»Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ°. ΠΡ Ρ ΠΎΡΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΈΡΠ΅ΠΌ ΡΠ»ΠΎΠ²ΠΎ Β«dogΒ» ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²ΠΈΠ΄Π΅ΡΡ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΡΡΠΎ ΡΠ»ΠΎΠ²ΠΎ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΏΠΎΠΈΡΠΊΠ° Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅Ρ ΠΏΠΎΠΈΡΠΊ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠΈ Π½Π΅ ΡΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π΅.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π² ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΡ Π±Π°Π·Π°Ρ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°. ΠΠ°ΠΆΠ΄Π°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ-ΡΠ²ΠΎΠ΅ΠΌΡ, ΠΈ SQLAlchemy Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½Π° ΡΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ.
ΠΡ ΡΠ΅ΠΉΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ SQLite Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ Π±Π°Π·Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ»Π΅ΠΌΡΠ΅ SQLite, Π² ΠΎΠ±Ρ ΠΎΠ΄ SQLAlchemy. ΠΠΎ ΡΡΠΎ ΠΏΠ»ΠΎΡ Π°Ρ ΠΈΠ΄Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅ΡΠ»ΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠΉ Π΄Π΅Π½Ρ ΠΌΡ ΡΠ΅ΡΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° Π΄ΡΡΠ³ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ Π½Π°Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π΄Π»Ρ Π΄ΡΡΠ³ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΠΎΡΡΠ°Π²ΠΈΡΡ Π½Π°ΡΡ Π±Π°Π·Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π±Π°Π·Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°.
ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Π’ΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π°, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΈΠΌΠ΅Π΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Flask Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ Whoosh, ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ Π΅Π΅ ΡΠΎΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Python. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΡΠΎΠ³ΠΎ Python ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅Π³ΠΎ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Python. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΡΡΠ°Π²Π½ΠΈΡΡΡ Ρ Π΄Π²ΠΈΠΆΠΊΠ°ΠΌΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ Π½Π° C ΠΈΠ»ΠΈ C++. ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ Π±ΡΠ»ΠΎ Π±Ρ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Flask ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΈ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Ρ ΠΎΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Flask-SQLAlchemy ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ Π½Π°Ρ ΠΎΡ Π½ΡΡΠ°Π½ΡΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ , Π½ΠΎ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π½Π΅Ρ ΠΏΠΎΠΊΠ° Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π½Π° Django ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠ΅Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ django-haystack. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠΉ Π΄Π΅Π½Ρ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Flask.
ΠΠΎ ΡΠ΅ΠΉΡΠ°Ρ, ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ Π½Π°Ρ ΠΏΠΎΠΈΡΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Whoosh. Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ Flask-WhooshAlchemy, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π±Π°Π·Ρ Whoosh Ρ ΠΌΠΎΠ΄Π΅Π»ΡΡ Flask-SQLAlchemy.
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΠΏΠΎΠΊΠ° Π½Π΅Ρ Flask-WhooshAlchemy Π² Π²Π°ΡΠ΅ΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ, ΡΠ°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅Π³ΠΎ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Windows Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ:
ΠΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ³Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ:
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Ρ Flask-WhooshAlchemy ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°Ρ. ΠΡ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈΠΌΡ Π½Π°ΡΠ΅ΠΉ Π±Π°Π·Ρ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° (ΡΠ°ΠΉΠ» config.py ):
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Flask-WhooshAlchemy ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΠ΅ΡΡΡ Flask-SQLAlchemy, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΊΠ°ΠΊΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΡΡ (ΡΠ°ΠΉΠ» app/models.py ):
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Π½Π΅ ΠΌΠ΅Π½ΡΠ»ΠΈ ΡΠΎΡΠΌΠ°Ρ Π½Π°ΡΠ΅ΠΉ Π±Π°Π·Ρ, Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ.
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ Π²ΡΠ΅ ΠΏΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π² Π±Π°Π·Π΅ Π΄ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π΄Π²ΠΈΠΆΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, Π½Π΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Ρ. Π§ΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ ΡΡΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΠ΅ ΠΏΠΎΡΡΡ ΠΈΠ· Π±Π°Π·Ρ ΠΈ Π½Π°ΡΠ°ΡΡ ΡΠ½Π°ΡΠ°Π»Π°. Π‘Π½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Python. ΠΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Windows:
ΠΠ»Ρ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ :
ΠΡΠΈΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠΌ ΠΌΡ ΡΠ΄Π°Π»ΡΠ΅ΠΌ Π²ΡΠ΅ ΠΏΠΎΡΡΡ:
ΠΠΎΠΈΡΠΊ
Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ Π³ΠΎΡΠΎΠ²Ρ ΠΊ ΠΏΠΎΠΈΡΠΊΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ½Π°ΡΠ°Π»Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΡΠΎΠ² Π² ΠΠ. Π£ Π½Π°Ρ Π΅ΡΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΡΡΡ ΡΠ΅ΡΠ΅Π· web-Π±ΡΠ°ΡΠ·Π΅Ρ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΈΠ»ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ.
Π§Π΅ΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Flask-WhooshAlchemy ΠΎΡΠ΅Π½Ρ ΠΊΡΡΡΠΎΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΡΡ Ρ Flask-SQLAlchemy Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, Π²ΡΠ΅ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ Π΄Π»Ρ Π½Π°Ρ.
Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΡΠΎΠ² ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΏΠΎΠΈΡΠΊΠ°ΡΡ:
ΠΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ , Π·Π°ΠΏΡΠΎΡΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ. ΠΠΎ ΡΠ°ΠΊΡΡ Whoosh ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ².
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π² Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΠΈΡΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ° Π½ΡΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ (ΡΠ°ΠΉΠ» config.py ):
Π€ΠΎΡΠΌΠ° ΠΏΠΎΠΈΡΠΊΠ°
ΠΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° Π² ΡΡΡΠΎΠΊΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π²Π²Π΅ΡΡ Ρ ΡΡΡΠ°Π½ΠΈΡΡ. Π Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΠ΅ Π² Π²Π΅ΡΡ Π½Π΅ΠΉ ΡΠ°ΡΡΠΈ ΠΎΡΠ΅Π½Ρ ΡΠ΄Π°ΡΠ½ΠΎΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠΈΡΠΊ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠΎ Π²ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡ.
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ»Π°ΡΡ ΡΠΎΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° (ΡΠ°ΠΉΠ» app/forms.py ):
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΎΡΠΌΡ Π² Π½Π°Ρ ΡΠ°Π±Π»ΠΎΠ½(ΡΠ°ΠΉΠ» app/templates/base.html ):
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΡΠΎΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΡΠ΅Π» Π² ΡΠΈΡΡΠ΅ΠΌΡ. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ before_request ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΡΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΡΠ΅Π» Π² ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π½Π΅Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½ΡΠΌ Π³ΠΎΡΡΡΠΌ.
View. Π€ΡΠ½ΠΊΡΠΈΡ Search
ΠΠΎΠ»Π΅ action Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ ΡΠΎΡΠΌΡ Π±ΡΠ» ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π²ΡΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ search Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΡΠΎ ΡΠΎ ΠΌΠ΅ΡΡΠΎ Π³Π΄Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π°ΡΠΈ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ (ΡΠ°ΠΉΠ» app/views.py ):
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ ΡΠ°ΠΊΠ°Ρ ΡΠΆ ΠΈ Π±ΠΎΠ»ΡΡΠ°Ρ, ΠΎΠ½Π° ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π·Π°ΠΏΡΠΎΡ ΠΈΠ· ΡΠΎΡΠΌΡ ΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ Π½Π° Π΄ΡΡΠ³ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ Π·Π°ΠΏΡΠΎΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΡ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠΎΠΈΡΠΊ Π½Π°ΠΏΡΡΠΌΡΡ Π² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΎΠ±Ρ Π±ΡΠ°ΡΠ·Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π²ΡΠ΄Π°Π²Π°Π» ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ ΡΠΎΡΠΌΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ΄Π΅Π»Π°Π² ΡΠ΅Π΄ΠΈΡΠ΅ΠΊΡ Π½Π° POST-Π·Π°ΠΏΡΠΎΡ, ΡΠΎΠ³Π΄Π° ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡΡ Π±ΡΠ°ΡΠ·Π΅Ρ Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ» ΡΠ΅Π΄ΠΈΡΠ΅ΠΊΡ, Π° Π½Π΅ ΡΠ°ΠΌ Π·Π°ΠΏΡΠΎΡ.
Π‘ΡΡΠ°Π½ΠΈΡΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ²
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΠ° Π·Π°ΠΏΡΠΎΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° ΡΠΎΡΠΌΠΎΠΉ, ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ POST ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΅Π΅ ΡΠ΅ΡΠ΅Π· ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ search_results (ΡΠ°ΠΉΠ» app/views.py ):
Π€ΡΠ½ΠΊΡΠΈΡ search_result ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ Π² Whoosh, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π·Π°ΠΏΡΠΎΡΠΎΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², ΡΡΠΎΠ±Ρ Π·Π°ΡΠΈΡΠΈΡΡΡΡ ΠΎΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ°.
ΠΠΎΠΈΡΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ search_result (ΡΠ°ΠΉΠ» app/templates/search_results.html ):
ΠΠ°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»ΠΎΠ²Π°
ΠΡ ΡΠ΅ΠΉΡΠ°Ρ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΈ Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΡΡ, Ρ ΠΎΡΡ ΠΈ ΡΠ°ΡΡΠΎ ΡΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ ΠΈΠ· Π²ΠΈΠ΄Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±Π»Π°Π΄Π°ΡΡ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎΠ΅ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠΈΠΆΠ΅ Ρ Π²ΡΠΊΠ»Π°Π΄ΡΠ²Π°Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ microblog Π²ΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ, ΡΠ΄Π΅Π»Π°Π½Π½ΡΠΌΠΈ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΠ°ΠΊ Π²ΡΠ΅Π³Π΄Π°, Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½Π΅Ρ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π΅Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. ΠΡΠ»ΠΈ Π²Ρ ΡΠ»Π΅Π΄ΠΈΡΠ΅ Π·Π° ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠ΅ΠΉ ΡΡΠ°ΡΠ΅ΠΉ, Π²Ρ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ. ΠΡΠ»ΠΈ ΠΆΠ΅ Π½Π΅Ρ, ΡΠΎ Π²Π΅ΡΠ½ΠΈΡΠ΅ΡΡ ΠΊ ΡΡΠ°ΡΡΠ΅ ΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ.
ΠΠ°ΠΊ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΏΠΎΠΈΡΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΡ ΡΠ΅ΡΠ΅ΠΉ
ΠΠΎΡΠ΅ΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ°ΡΡ ΠΎΡΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ ΠΈ ΠΊΠ°ΠΊ Π±ΡΡΡ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠ΅ΡΡΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΡ Π²ΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΌ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠΌ β Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠΉ ΡΡΠ°Π·Π΅. Π‘Π°ΠΌΡΠΉ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ β ΡΡΠΎ ΠΏΠΎΠΈΡΠΊ Google.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΠΌΠ°Π»ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Elasticsearch. ΠΠ° Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ Ρ Π΄Π΅ΡΡΡΠΊΠ°ΠΌΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΡ Π² DD Planet ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ ΠΏΠΎ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ B2B-Π·Π°ΠΊΡΠΏΠΎΠΊ ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Elasticsearch. ΠΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΎΠΏΡΡΠ°Π»ΠΈΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠΈΡΠΊ ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² (Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ ΡΠΎΠ²Π°ΡΠΎΠ²), ΡΠΎ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ ΡΡΠ΄ΠΎΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΏΠΎΠΈΡΠΊ
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ Elasticsearch, ΠΎΡΠ½ΠΎΠ²Π°Π½Ρ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ΅ β ΡΡΡΡΠΊΡΡΡΠ΅ Π΄Π°Π½Π½ΡΡ , Π³Π΄Π΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° ΠΈΠ· Π±Π°Π·Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² Ρ ΡΠ°Π½ΡΡΡΡ Π²ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ΠΎ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ. ΠΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΡΠ΅ΠΊΡΡΠ°ΠΌ.
ΠΡΡΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠΎΡΠΏΡΡ ΠΈΠ· Π±Π°Π·Ρ ΠΈΠ· ΡΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠΎΠ²:
ΡΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠΎΠΈΡΠΊ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ»ΠΎΠ²Ρ ΠΎΡΠ΅Π²ΠΈΠ΄Π΅Π½ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠΌΡ ΡΠ»ΠΎΠ²Ρ. ΠΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ ΡΡΠ°Π·Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΊ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΡΠ»ΠΎΠ²Π°ΠΌ Ρ ΡΠ΅Π»ΡΡ ΡΠ°Π½ΠΆΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎ ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΎΡΡΠΈ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠΈΡΠΊ ΡΡΠ°Π·Ρ Β«ΠΊΡΠ°ΡΠ½Π°Ρ ΡΡΡΠΊΠ°Β». ΠΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠ»ΠΎΠ²Ρ Β«ΠΊΡΠ°ΡΠ½ΡΠΉΒ» Π΄Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ <2>, ΠΏΠΎ ΡΠ»ΠΎΠ²Ρ Β«ΡΡΡΠΊΠ°Β» β <0>. ΠΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΡΡΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΎΡΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π½Π΅Ρ. ΠΡΠ»ΠΈ ΡΡΠΈΡΠ°ΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π΄Π²Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° <0, 2>c ΡΡΠ΅ΠΏΠ΅Π½ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ Β½. Π ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ ΡΠ°Π½ΠΆΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΡΡΠ΅ΡΠΎΠΌ TF-IDF, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΠ΄Π°ΡΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΏΠ°ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π±Π΅Π· ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠΌ.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°
ΠΡΠ»ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΊΠ°ΡΡ Π²Π½ΡΡΡΠΈ Π΄Π°Π½Π½ΡΡ , Π° ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΈΡ , Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΠΏΠΎΡ ΠΎΠΆΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΡΠ΅ ΠΆΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ, ΡΠΎ ΠΌΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ:
NLP ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΅ΡΠΈΡΡ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ NLP ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ². NLP (Natural Language Processing) β ΠΎΠ±ΡΠ΅Π΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΠ° ΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π»ΠΈΠ½Π³Π²ΠΈΡΡΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΠ·ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΡΠΈΠ½ΡΠ΅Π·Π° Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ².
NLP ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎ-ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°, ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ-ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°. Π‘Π΅ΠΉΡΠ°Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π³ΠΎΡΠΎΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² ΠΈ ΡΠΆΠ΅ ΡΠ΅ΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ.
ΠΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ΅ΠΏΠ΅Π½Ρ Β«ΠΏΠΎΡ ΠΎΠΆΠ΅ΡΡΠΈΒ» ΡΡΠ°Π·
Π NLP Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ° β Paraphrase Identification β ΡΡΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ) ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΈΠΌΠ΅ΡΡ Π»ΠΈ ΠΎΠ½ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΡΠΎ Π΅ΡΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠ°ΡΠ°ΡΡΠ°Π·Π°ΠΌΠΈ). ΠΡΠΈΠΌΠ΅Ρ ΠΏΠ°ΡΠ°ΡΡΠ°Π·: Β«ΠΠ°Π²ΡΡΠ° ΠΊΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΠΎ 17:00Β» ΠΈ Β«ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π΄Π΅Π½Ρ ΠΊΠ°ΡΠ΅ΡΠ΅ΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄ΠΎ ΠΏΡΡΠΈ Π²Π΅ΡΠ΅ΡΠ°Β». ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Π½Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ? Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΡΡΠ°Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΎΠ²Π°ΡΠΎΠ² ΠΈ Π²ΡΡΡΠ½ΡΡΡ, ΡΠ²ΡΠ·Π°Π½Ρ Π»ΠΈ ΠΎΠ½ΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΎΠ²Π°ΡΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ.
ΠΡΠ° Π·Π°Π΄Π°ΡΠ° Ρ ΠΎΡΠΎΡΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π°. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΡΡΠ°Π· Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΠΈ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ°Ρ . Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΡ ΠΎΠ±ΡΠ°ΡΠΈΠ»ΠΈΡΡ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ DeepPavlov.ai [1], ΠΌΠΎΡΠ½ΠΎΠΌΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΌΡ Π² ΠΠ€Π’Π. Π Π½Π΅ΠΌ ΡΠΎΠ±ΡΠ°Π½Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΡΡΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ Π±ΡΠ»ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π°Π·Ρ ΠΏΠ°ΡΠ°ΡΡΠ°Π·. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΡΠ° ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Π° (ΠΏΠΎΠΈΡΠΊ ΡΠΎΠ²Π°ΡΠΎΠ²), Π½Π°ΠΌ Π½ΡΠΆΠ½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ . ΠΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π°Π³ΡΠ΅Π³Π°ΡΠΎΡΠ°ΠΌΠΈ ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ² Π²ΠΈΠ΄Π° Π―Π½Π΄Π΅ΠΊΡ.ΠΠ°ΡΠΊΠ΅ΡΠ°. ΠΠ·ΡΠ»ΠΈ ΠΎΠ΄Π½ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΎΠ²Π°ΡΠ° Ρ ΠΠ°ΡΠΊΠ΅ΡΠ° ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΎΠ²Π°ΡΠ° Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅.
ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΡΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ, ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈΡΡ Π² DeepPavlov, ΠΌΡ ΠΏΠΎΠ½ΡΠ»ΠΈ β ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄Π°ΡΡ Π½Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ Π½Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ .
ΠΠ°ΠΊ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠΈΡΠΊ, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ ΠΏΠΎΡΡΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅Ρ
ΠΠ΄Π½Π°ΠΊΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ, Π° Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ
ΠΎΠΆΠΈΠ΅ ΡΠΎΠ²Π°ΡΡ. ΠΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ? ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Elasticsearch ΠΈΠΌΠ΅Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ°
. ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π΄ΠΎΡΡΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΏΠΎΠΈΡΠΊΠ°.
Π§ΡΠΎ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ: ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΡΠ΅ΠΏΠ΅Π½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ. ΠΡΠ΄Π΅ΠΌ Π΄Π°Π»Π΅Π΅ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ.
ΠΡΠ»ΠΈ ΠΏΠΎΠΊΠΎΠΏΠ°ΡΡΡΡ Π² ΡΠ΅ΠΎΡΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠΊΠ½ΡΡΡΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΡΡΡΠΊΡΡΡΡ: ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ β ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΠΊΠ°Ρ, ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π°ΠΊΡΠΈΠΎΠΌΡ:
ΠΠ°ΡΠ΅ΠΌ Π½Π°ΠΌ Π½ΡΠΆΠ½Π° ΡΠ°ΠΊΠ°Ρ ΡΠ»ΠΎΠΆΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°? ΠΠ½Π° Π½ΡΠΆΠ½Π° Π΄Π»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ ΠΏΠΎΠΈΡΠΊΠ° Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΡ
ΡΠΎΡΠ΅Π΄Π΅ΠΉ (Nearest neighbor search) β Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎΡ
ΠΎΠΆΠΈΡ
ΡΠΎΠ²Π°ΡΠΎΠ². Π’Π°ΠΊΠ°Ρ Π·Π°Π΄Π°ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Π° Π² ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΡΠΊΡΡΡΡ vantage-point tree, ΠΏΠΎΠΈΡΠΊ Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠΌΠ΅Π΅Ρ Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΡ ΠΏΠΎΠΈΡΠΊΠ° [2]. ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, Π΅ΡΠ»ΠΈ Π±Ρ ΡΠ΅ΡΡ ΡΠ»Π° ΠΎ Π²Π΅ΠΊΡΠΎΡΠ°Ρ
, ΡΡΠ° Π·Π°Π΄Π°ΡΠ° ΡΠ΅ΡΠΈΠ»Π°ΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ Kd-Π΄Π΅ΡΠ΅Π²ΡΠ΅Π². ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±ΠΎΠ»Π΅Π΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½Ρ, Π²ΡΠ΅ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅.
Vantage-point tree
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ vantage-point tree [3]. ΠΠ½ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ball-tree, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² Π²Π΅ΠΊΡΠΎΡΠ½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ . ΠΠ³ΠΎ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΡΡΡΠΎΠΈΡΡΡ. ΠΡ Π±Π΅ΡΠ΅ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Π΅ΡΡΠΈΠ½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° (vantage-point) ΠΈ ΡΠΈΡΡΠ΅ΠΌ Π²ΠΎΠΊΡΡΠ³ Π½Π΅Π³ΠΎ ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΡ (ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅).
ΠΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π²Π½ΡΡΡΠΈ ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ (ΡΠΎ Π΅ΡΡΡ Π½Π° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΈ ΠΎΡ vantage-point), ΠΈΠ΄ΡΡ Π² Π»Π΅Π²ΡΡ ΡΠ°ΡΡΡ Π΄Π΅ΡΠ΅Π²Π°. ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ β Π² ΠΏΡΠ°Π²ΡΡ ΡΠ°ΡΡΡ. ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π°. Π§ΡΠΎΠ±Ρ Π΄Π΅ΡΠ΅Π²ΠΎ Π±ΡΠ»ΠΎ ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΎ, Π½Π°Π΄ΠΎ ΡΡΠ°ΡΠ°ΡΡΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ S ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΄Π΅Π»ΠΈΠ»ΠΎΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π²Π½ΡΠ΅ ΡΠ°ΡΡΠΈ. ΠΡΠΎ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΏΡΠΎΡΡΠΈΡΠ°ΡΡ Π²ΡΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΈ Π½Π°ΠΉΡΠΈ ΠΈΡ
ΠΌΠ΅Π΄ΠΈΠ°Π½Ρ.
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ Ρ
ΠΎΡΠΈΠΌ Π½Π°ΠΉΡΠΈ K Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΡ
ΡΠΎΡΠ΅Π΄Π΅ΠΉ ΠΊ ΡΠΎΡΠΊΠ΅ (ΠΎΡΠΌΠ΅ΡΠ΅Π½Π° ΠΊΡΠ°ΡΠ½ΡΠΌ ΠΊΡΠ΅ΡΡΠΈΠΊΠΎΠΌ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅). ΠΡ Π΅ΡΠ΅ Π½Π΅ Π½Π°ΡΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π³ΠΎ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠ° Π±Π΅ΡΠ΅ΠΌ Π²Π΅ΡΡΠΈΠ½Ρ Π΄Π΅ΡΠ΅Π²Π° (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌ ΠΌΡ ΡΠ΄Π°Π»ΠΈΠΌ ΡΡΡ ΡΠΎΡΠΊΡ). ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
β ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ Π΄Π°Π»ΡΠ½Π΅Π³ΠΎ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠ°. Π’Π΅ΠΏΠ΅ΡΡ Π½Π°Π΄ΠΎ ΡΠ΅ΡΠΈΡΡ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ Π½Π°ΠΌ ΠΈΡΠΊΠ°ΡΡ Π² ΠΎΠ±ΠΎΠΈΡ
ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΡΡΡ
ΠΈΠ»ΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈ Π½ΠΈΡ
.
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΡΠΊΠ° Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ Π½Π°ΡΠ΅ΠΉ ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Β«Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅Β» ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ. ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ Π² ΡΡΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π΅ ΡΠΈΠ½ΡΡ ΡΠΎΡΠΊΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
. ΠΠ°Π΄ΠΎ Π»ΠΈ Π½Π°ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Β«Π²Π½Π΅ΡΠ½Π΅Π΅Β» ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ? ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π²ΡΠ΅ ΡΠΎΡΠΊΠΈ Π²Π½ΡΡΡΠΈ ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ, Π½ΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ
T$» data-tex=»inline»/> (ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΡ X Π΄ΠΎ ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ), Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ ΡΠΎΡΠΊΠΈ. ΠΠ½Π°ΡΠΈΡ, Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Β«Π²Π½Π΅ΡΠ½Π΅Π΅Β» ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ.
ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠΆΠ΅ ΡΠΎΠ±ΡΠ°Π»ΠΈ K Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΡ
ΡΠΎΡΠ΅ΠΊ, Π° , ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Β«Π²Π½Π΅ΡΠ½Π΅Π΅Β» ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΡΠΎ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΡΠΈΠ³ΡΡΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠ»Π½ΡΠΌ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠΎΠΌ.
ΠΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ
ΠΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ°ΡΠ°ΡΡΠ°Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ vantage-point tree ΠΈ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ ΡΡΠ΄ΠΎΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌ:
ΠΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²Π°Ρ Π°ΠΊΡΠΈΠΎΠΌΠ° β ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΡΠΊΠ°ΠΌΠΈ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠ°Π²Π½Ρ. ΠΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΆΠ΅ Π½Π° ΠΎΠ±ΡΡΠ°ΡΡΠ΅ΠΉ Π²ΡΠ±ΠΎΡΠΊΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠΎΠ»Π°Π³Π°Π»ΠΈ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π·Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΏΡΠΈ ΠΈΡ ΡΠ°Π·Π½ΠΎΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ cosine ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠΎ Doc2Vec Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ Π²Π΅ΡΠΎΠΌ β ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
ΠΠ΄Π½Π°ΠΊΠΎ Π²ΠΎΠΏΡΠΎΡ ΠΏΠΎΠ΄Π±ΠΎΡΠ° Π²Π΅ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠ° Ξ΅ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΎΡΠΊΡΡΡΡΠΌ β Ρ ΡΡΠΈΠΌ Π½Π°Π΄ΠΎ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ .
ΠΠΎΠ΄Π΅Π»Ρ Π½Π΅ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½Π°. ΠΠΎΡΠ΅ΠΌΡ? ΠΠΎΠ½ΡΡΡ ΡΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ, Π½ΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ float32. ΠΠ·-Π·Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠ»ΠΎΡΡ
Π½Π΅ΠΉΡΠΎΠ½ΠΎΠ². ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π»Π΅Π³ΠΊΠΎ ΡΠ΅ΡΠ°Π΅ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΎΡ Π΄ΠΎ
, Π° ΠΏΠΎΡΠΎΠΌ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΈ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
ΠΠ΅ Π²ΡΠ΅Π³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π΅ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° . ΠΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠ°ΡΠ°ΡΡΠ°Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ°Π·Ρ
ΠΡΠΎ Π½Π°Π³Π»ΡΠ΄Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠΎΠ²Π°Ρ Π²ΡΠ΄Π°ΡΠ° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΠΉ. ΠΡΠΏΡΠ°Π²ΠΈΡΡ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, Π½ΠΎ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΠ° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ Doc2Vec β Π΄Π»Ρ Π½Π΅Π³ΠΎ Π½Π΅ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³Π΄Π°.
ΠΡΠΏΠΎΠ»Π½ΠΈΠ² ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΊΡΠΈΡΠ΅ΡΠΈΠΈ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π²ΡΡΠ΅, ΠΌΡ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ β Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΎΡΠ»ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ, Π° Π½Π΅ Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈ, ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ. ΠΠΎΠΊΠΎΠΏΠ°Π²ΡΠΈΡΡ Π² Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ΅, ΠΌΡ Π²ΡΡΡΠ½ΠΈΠ»ΠΈ: Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΡΠ΅ΠΊ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ [2]. Π Ρ Π½Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π½Π΅ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ β ΠΎΠ½ΠΈ ΡΠ°ΡΠ΅ Π΄Π°Π»ΡΡΠ΅, ΡΠ΅ΠΌ Π±Π»ΠΈΠΆΠ΅.
ΠΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ ΠΏΡΠΈΡΠ»Π° ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΈΠ΄Π΅Ρ. ΠΠΎΡΡΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΠ°ΡΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ ΠΈ Π½Π°Π½Π΅ΡΠ΅ΠΌ ΠΈΡ Π½Π° Π³ΡΠ°ΡΠΈΠΊ (Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ ΡΠ»Π΅Π²Π°). ΠΡΠ»ΠΈ ΠΌΡ ΡΠ°ΡΡΡΠ½Π΅ΠΌ Π²Π΅ΡΡ Π½ΡΡ ΡΠ°ΡΡΡ Π³ΡΠ°ΡΠΈΠΊΠ°, Π° Π½ΠΈΠΆΠ½ΡΡ ΡΠΎΠΆΠΌΠ΅ΠΌ, ΡΠΎ ΡΠΎΡΠΊΠΈ Π±ΡΠ΄ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ (ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ ΡΠΏΡΠ°Π²Π°). ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ ΠΎΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠ² ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Β«ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠ΅Β» ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ.
ΠΡΠΎΠ³ΠΈ
ΠΠΎΠΊΠ° ΡΡΠΎ ΠΌΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ Π±Π°Π·Π°Ρ Π΄Π°Π½Π½ΡΡ (Π΄ΠΎ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²), ΠΈ ΡΠ°ΠΌ Π½Π°Ρ ΠΏΠΎΠΈΡΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ. ΠΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°ΡΡΠ΅Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠΌ.
Π ΠΎΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠΈΡΠΊΠ° Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ. ΠΠΎΡΠ΅ΠΌΡ ΡΠΎΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠΈΡΠΊΠ° Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ΅Π½? ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎΠΈΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΡΠ΅ΠΊ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅. ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ: Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΡΠ΅ΠΊ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅, ΡΠΎ ΠΊΠ°ΠΊΠΎΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ? Π Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ΅ ΠΏΠΎ vantage-point tree ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΡΡΡ, Π½ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΡΡΡ ΡΠΌΠ΅ΠΆΠ½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ β ΠΊΠ°ΠΊ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ vantage-point.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ°ΡΡ ΡΠ°ΠΌΡΡ ΠΊΡΠ°ΠΉΠ½ΡΡ ΡΠΎΡΠΊΡ[2], ΡΠΎΠ³Π΄Π° Π½Π° Π³ΡΠ°Π½ΠΈΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠΎΡΠ΅ΠΊ ΠΈ ΠΏΠΎΠΈΡΠΊ ΡΡΠ°Π½Π΅Ρ Π»ΡΡΡΠ΅. ΠΠΎ ΡΡΠ° ΠΈΠ΄Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠ° ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ Ρ ΠΏΠΎΠ½ΡΡΠΈΡΠΌΠΈ Π»Π΅Π²ΠΎ, ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΊΡΠ°ΠΉ. Π ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ Π±Π΅Π· ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡΠ° ΠΈΠ΄Π΅Ρ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠ°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Β«ΡΠ΅ΡΠ΅Π±ΡΡΠ½ΠΎΠΉ ΠΏΡΠ»Π΅ΠΉΒ». ΠΡ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΎΠ²Π°ΡΠΎΠ², ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΠΎΡΠ»ΠΈΡΠ½ΠΎ. ΠΡΠ»ΠΈ Π²ΡΠ±ΡΠ°ΡΡ Π΄ΡΡΠ³ΡΡ ΡΠ΅ΠΌΠ°ΡΠΈΠΊΡ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΄ΡΡΠ³ΠΈΠΌΠΈ.
ΠΠ΅Π³Π°-Π£ΡΠ΅Π±Π½ΠΈΠΊ Flask, Π§Π°ΡΡΡ XVI: ΠΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΏΠΎΠΈΡΠΊ
(ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ 2018)
Miguel Grinberg
Π’ΡΠ΄Π° Π‘ΡΠ΄Π°
ΠΡΠΎ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ°Ρ ΡΠ°ΡΡΡ ΡΠ΅ΡΠΈΠΈ ΠΠ΅Π³Π°-ΡΡΠ΅Π±Π½ΠΈΠΊΠΎΠ² Flask, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΌΠΈΠΊΡΠΎΠ±Π»ΠΎΠ³ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°.
ΠΠΎΠ΄ ΡΠΏΠΎΠΉΠ»Π΅ΡΠΎΠΌ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΡΡΠ°ΡΠ΅ΠΉ ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠΈ 2018 Π³ΠΎΠ΄Π°.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ 1: ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠ΅ΡΠ΅ ΡΡΠ°ΡΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΡΡΡΠ°, ΡΡΠΎ Π·Π΄Π΅ΡΡ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ 2: ΠΡΠ»ΠΈ Π²Π΄ΡΡΠ³ ΠΡ Π·Π°Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ Π²ΡΡΡΡΠΏΠΈΡΡ Π² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΌΠΎΠ΅ΠΉ(ΠΠΈΠ³Π΅Π»Ρ) ΡΠ°Π±ΠΎΡΡ, ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅ΡΠ΅ ΡΠ΅ΡΠΏΠ΅Π½ΠΈΡ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ ΡΡΠ°ΡΡΠΈ Π½Π΅Π΄Π΅Π»Ρ, Ρ (ΠΠΈΠ³Π΅Π»Ρ ΠΡΠΈΠ½Π±Π΅ΡΠ³)ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΏΠΎΠ»Π½ΡΡ Π²Π΅ΡΡΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°(Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅) Π² Π²ΠΈΠ΄Π΅ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎ. ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ learn.miguelgrinberg.com.
Π¦Π΅Π»Ρ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ β ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° Π΄Π»Ρ Microblog, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°. ΠΠ»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ² Π²Π΅Π±-ΡΠ°ΠΉΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ Google, Bing ΠΈ Ρ. Π΄. ΠΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ΅ΡΠ΅Π· ΡΠ²ΠΎΠΈ API ΠΏΠΎΠΈΡΠΊΠ°. ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ ΡΠ°ΠΉΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΡΡΠΌ. ΠΠΎ Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΉ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠΎΠΈΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠ½Π΅ Π½ΡΠΆΠ΅Π½, ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΡΠΈΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌ Π² Π±Π»ΠΎΠ³Π΅, Π° Π½Π΅ ΡΠ΅Π»ΡΠΌ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ ΠΈΡΡ ΡΠ»ΠΎΠ²ΠΎ Β«ΡΠΎΠ±Π°ΠΊΠ°Β», ΡΠΎ Ρ ΠΎΡΡ Π²ΠΈΠ΄Π΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΡΠΎ ΡΠ»ΠΎΠ²ΠΎ Π² Π±Π»ΠΎΠ³Π°Ρ ΡΠ°Π·Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡΡ ΡΠ»ΠΎΠ²ΠΎ Β«ΡΠΎΠ±Π°ΠΊΠ°Β» (ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΡΠ΅ΡΠΌΠΈΠ½ ΠΏΠΎΠΈΡΠΊΠ°), Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ ΡΡΡΠ°Π½ΠΈΡΠ° Π² Π±Π»ΠΎΠ³Π΅, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠ³ΡΡ Π½Π°ΠΉΡΠΈ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π²ΡΠ±ΠΎΡΠ°, ΠΊΡΠΎΠΌΠ΅ ΠΊΠ°ΠΊ ΡΠΎΡΠ²ΠΎΡΠΈΡΡ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ°.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°, ΠΊΠ°ΠΊ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ Π΄Π²ΠΈΠΆΠΊΠΎΠ² Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ: Elasticsearch, Apache Solr, Whoosh, Xapian, Sphinx ΠΈ Ρ.Π΄. ΠΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΡΡΠΎΠ³ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ! ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°Π· Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠΈΡΠΊΠ°, ΡΡΠ°Π²Π½ΠΈΠΌΡΠ΅ Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠ» Π²ΡΡΠ΅. SQLite, MySQL ΠΈ PostgreSQL ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ΅ΠΊΡΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ NoSQL, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ MongoDB ΠΈ CouchDB.
ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Flask, ΠΎΡΠ²Π΅Ρ β Π²ΡΠ΅ ΠΎΠ½ΠΈ! ΠΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠΈΠ»ΡΠ½ΡΡ ΡΡΠΎΡΠΎΠ½ Flask, ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ ΠΈ Π½Π΅ ΡΠΏΡΡΠΌΠΈΡΡΡ. Π’Π°ΠΊ ΡΡΠΎ ΡΡΠΎ Π»ΡΡΡΠΈΠΉ Π²ΡΠ±ΠΎΡ?
ΠΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ, ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌ Elasticsearch β ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ. Π ΠΊΠ°ΠΊ ΡΠ°ΠΌΡΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ, ΠΈ Π·Π½Π°ΡΠΈΠΌΡΠΉ ΡΡΠΎΠΈΡ ΠΏΠ΅ΡΠ²ΡΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° Β«EΒ» Π² ΡΡΠ΅ΠΊΠ΅ ELK Π΄Π»Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π»ΠΎΠ³ΠΎΠ², ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ Logstash ΠΈ Kibana. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΠΎΠΈΡΠΊΠ° Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ, Π½ΠΎ Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠΎΠ³ΠΎ ΡΠ°ΠΊΡΠ°, ΡΡΠΎ SQLAlchemy Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠΎΠΈΡΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ SQL-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΈΠ»ΠΈ Π½Π°ΠΉΡΠΈ ΠΏΠ°ΠΊΠ΅Ρ Ρ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ SQLAlchemy.
ΠΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° Π²ΡΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ, Ρ Π²ΡΠ±ΠΈΡΠ°Ρ Elasticsearch, Π½ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ° ΠΈ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°, ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅.
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Elasticsearch Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈ ΠΎΠ½, Π²Π²Π΅Π΄Ρ http://localhost:9200 Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ΅ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Elasticsearch Π±ΡΠ΄Π΅Ρ ΠΈΠ· Python, Ρ Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Python:
Π’Π΅ΠΏΠ΅ΡΡ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΠΉΠ» requirements.txt:
Elasticsearch Tutorial
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Ρ ΠΏΠΎΠΊΠ°ΠΆΡ Π²Π°ΠΌ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠ°Π±ΠΎΡΡ Ρ Elasticsearch ΠΈΠ· ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Python. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΡΡΠΈΠΌ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ ΠΈ ΠΏΠΎΠ½ΡΡΡ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΏΠΎΠ·ΠΆΠ΅.
ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ index ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ², ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ doc_type ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² ΡΠ°Π·Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΡΠΈΠΌΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΎΡΠΌΠ°ΡΠ°ΠΌΠΈ. Π― ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ Ρ ΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΡΠΎΡΠΌΠ°ΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ ΡΠΈΠΏ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΡΠ°Π²Π½ΡΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°.
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Elasticsearch ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ JSON Ρ Π΄Π°Π½Π½ΡΠΌΠΈ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ Π²ΡΠΎΡΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΆΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ:
Π ΡΠ΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π² ΡΡΠΎΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ΅ Π΅ΡΡΡ Π΄Π²Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, Ρ ΠΌΠΎΠ³Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΠΈΡΠΊ Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅. Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π±ΡΠ΄Ρ ΠΈΡΠΊΠ°ΡΡ this test :
ΠΡΠ²Π΅Ρ es.search() ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ Python Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ ΠΏΠΎΠΈΡΠΊΠ°:
ΠΠ΄Π΅ΡΡ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΏΠΎΠΈΡΠΊ Π²Π΅ΡΠ½ΡΠ» Π΄Π²Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΎΡΠ΅Π½ΠΊΠΎΠΉ. ΠΠΎΠΊΡΠΌΠ΅Π½Ρ Ρ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΠΎΡΠ΅Π½ΠΊΠΎΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π²Π° ΡΠ»ΠΎΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΈΡΠΊΠ°Π», Π° Π΄ΡΡΠ³ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ. ΠΠΎ, ΠΊΠ°ΠΊ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅, Π΄Π°ΠΆΠ΅ Π»ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ Π±Π°Π»Π», ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ»ΠΎΠ²Π° Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠ΅ΠΊΡΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»ΠΎΠ²Π° second :
ΠΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΠΎΡΠ΅Π½ΠΊΠ° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½ΠΈΠ·ΠΊΠ°Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠΎΠΉ ΠΏΠΎΠΈΡΠΊ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΡ Π² ΡΡΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»ΠΎΠ²ΠΎ «second», Π΄ΡΡΠ³ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ.
ΠΠ±ΡΠ΅ΠΊΡ Π·Π°ΠΏΡΠΎΡΠ° Elasticsearch ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΡΠ΅ ΠΎΠ½ΠΈ Ρ ΠΎΡΠΎΡΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ. Π‘ΡΠ΅Π΄ΠΈ Π½ΠΈΡ ΡΠ°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°, ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ .
ΠΠ΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΡΡΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Elasticsearch
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Elasticsearch Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΊΡΡΡΠΎΡΡΠΈ Flask. ΠΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΈ ΠΏΠ°ΠΊΠ΅Ρ Python, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ Ρ Flask, Π½ΠΎ Ρ Π²ΡΠ΅ ΠΆΠ΅ ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΈΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ. ΠΠ°ΡΠ½Ρ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄Ρ ΠΏΠΈΡΠ°ΡΡ Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅ app.config Π΄Π»Ρ Flask:
app/init.py: Elasticsearch instance.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ None ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ Elasticsearch, Π΅ΡΠ»ΠΈ URL-Π°Π΄ΡΠ΅Ρ ΡΠ»ΡΠΆΠ±Ρ Elasticsearch Π½Π΅ Π±ΡΠ» ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΡΡΠ΅Π΄Π΅.
ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΡ Full-Text Search
ΠΠ°ΠΊ Ρ ΡΠΊΠ°Π·Π°Π» Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊ Π³Π»Π°Π²Π΅, Ρ Ρ ΠΎΡΡ ΡΠΏΡΠΎΡΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΎΡ Elasticsearch ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ. Π Ρ Π½Π΅ Ρ ΠΎΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² Π±Π»ΠΎΠ³Π΅, Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Ρ ΠΌΠΎΠ³Ρ Π»Π΅Π³ΠΊΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΠΈΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π΅ΡΠ»ΠΈ ΠΌΠ½Π΅ ΡΡΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ. ΠΠΎ Π²ΡΠ΅ΠΌ ΡΡΠΈΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ, Ρ ΡΠ΅ΡΠΈΠ» ΡΠΎΠ·Π΄Π°ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ΄Π΅Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΎΠ±ΡΠΈΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ , ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ Π±ΡΠ΄Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ ΠΌΠΎΠ΄Π΅Π»Ρ Post ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π°, ΠΈ Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ Π±ΡΠ΄Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ Elasticsearch ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ-Π΄Π²ΠΈΠΆΠΊΠΎΠΌ. ΠΠΎ Π΅ΡΠ»ΠΈ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ Π΄Π΅Π»Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½ΠΈ ΠΎ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΡ ΡΠ°Π±ΠΎΡΡ?
app/models.py: Add a __searchable__ attribute to the Post model.
Π― ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π²Π΅ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ Elasticsearch Π² ΠΌΠΎΠ΄ΡΠ»Π΅ app/search.py. ΠΠ΄Π΅Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π²Π΅ΡΡ ΠΊΠΎΠ΄ Elasticsearch Π² ΡΡΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅. ΠΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Elasticsearch. ΠΡΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ Ρ ΡΠ΅ΡΡ, ΡΡΠΎ ΠΌΠ½Π΅ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ Elasticsearch ΠΈ ΡΠΎΠ±Π΅ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ, Π²ΡΠ΅, ΡΡΠΎ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠΎΠΌ ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅, ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠΈΠ», ΡΡΠΎ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΡΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ°: ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ:
ΠΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ app/search.py, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΠΈ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Elasticsearch, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΏΠΎΠΊΠ°Π·Π°Π» Π²Π°ΠΌ Π²ΡΡΠ΅ Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Python:
Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈΠΌΡ index. ΠΠΎ Π²ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Π°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Ρ Elasticsearch, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎ ΠΈΠΌΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΈΠΏΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΊΠ°ΠΊ Ρ ΡΠΆΠ΅ Π΄Π΅Π»Π°Π» ΡΡΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Python.
ΠΡΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π·Π°ΠΏΡΡΠ°Π½Π½ΠΎ? ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Python ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡΡ ΠΈΡ ΠΏΠΎΠ»ΡΡΡΠ΅. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ΅Π°Π½ΡΠ΅ Ρ Π²ΡΡΡΠ½ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π² ΠΈΠ½Π΄Π΅ΠΊΡ Elasticsearch. Π ΠΌΠΎΠ΅ΠΉ ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ»ΠΈ ΡΠΈΡΡΡ «one», «two», «three», «four» ΠΈ Β«ΠΏΡΡΡΒ», ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΈΡ Π² ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ Π·Π°ΠΏΡΠΎΡΠ°Ρ . ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ Π·Π°ΠΏΡΠΎΡ Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ Π²Π°ΡΠ΅ΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ :
ΠΠ°ΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΠ», Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ². ΠΠΎΠ½Π°ΡΠ°Π»Ρ Ρ Π·Π°ΠΏΡΠΎΡΠΈΠ» 1 ΡΡΡΠ°Π½ΠΈΡΡ ΡΠΎ 100 ΠΏΡΠ½ΠΊΡΠ°ΠΌΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ» Π²ΡΠ΅ ΡΠ΅ΠΌΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ . ΠΠ°ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΠΊΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ, Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π» Π΄Π»Ρ Flask-SQLAlchemy, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΊΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² SQLAlchemy.
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅ Π² ΡΠΈΡΡΠΎΡΠ΅, ΡΠ΄Π°Π»ΠΈΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡ posts ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π°ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΡΠ΅ΡΡ Ρ Π½ΠΈΠΌ:
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° Ρ SQLAlchemy
Π Π΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ ΠΏΠΎΠΊΠ°Π·Π°Π» Π²Π°ΠΌ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ΅, Π½ΠΎ Ρ Π½Π΅Π³ΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ΡΠ΅ΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠ΅ΡΠ²Π°Ρ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π°Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΊΠ° ΡΠΈΡΠ»ΠΎΠ²ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ². ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ½Π΅ Π½ΡΠΆΠ½Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ SQLAlchemy, ΡΡΠΎΠ±Ρ Ρ ΠΌΠΎΠ³ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡ Π² ΡΠ°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΈ ΠΌΠ½Π΅ Π½ΡΠΆΠ΅Π½ ΡΠΏΠΎΡΠΎΠ± Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΡΠ΅Π» ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²Π½ΠΎΠΉ Π²ΡΠ΄Π°Π²Π°Π»ΠΎ Π²ΡΠ·ΠΎΠ²Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΡΡΡΡ, ΡΡΠΎ Π½Π΅ ΡΡΡΠ°ΡΠ½ΠΎ, Π½ΠΎ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠΏΡΡΠ΅Π½Π½ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΏΡΠΈ Π²Π½Π΅ΡΠ΅Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ SQLAlchemy Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ Π±ΡΡΡ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Ρ. ΠΠ²Π΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π²ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ Π²Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΡΠΎ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΊΠ°ΠΊΠΎΠ΅ ΡΠΎ Π²ΡΠ΅ΠΌΡ. ΠΡΡΡΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ»ΠΎ Π±Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΏΡΠΈ Π²Π½Π΅ΡΠ΅Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ SQLAlchemy.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΌΠ΅Π½Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Π° ΠΏΡΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ° SQLAlchemy, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΠΈΡΠ°Π΅Ρ ΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ Π·Π²ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ, Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ ΡΠ°ΠΊ ΡΠΎ ΠΏΡΠΎΡΡΠΎ.
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ (Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ) Ρ ΡΠ΅ΡΠΈΠ» Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Elasticsearch ΠΈΠ· events (ΡΠΎΠ±ΡΡΠΈΠΉ) SQLAlchemy. SQLAlchemy ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ commit-Π° (ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ) ΡΠ΅Π°Π½ΡΠ°, Ρ ΠΌΠΎΠ³ Π±Ρ ΠΈΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΌ SQLAlchemy, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠ³ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠ΅ ΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠ΄Π΅Π»Π°Π½Ρ Π² ΡΠ΅Π°Π½ΡΠ΅ SQLAlchemy ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡΡ Elasticsearch.
ΠΠΎΠ·Π²ΠΎΠ»ΡΡΠ΅ ΠΌΠ½Π΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π° Π·Π°ΡΠ΅ΠΌ Ρ ΡΠ°ΡΡΠΌΠΎΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ΠΎΠ²ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ°ΠΊ ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΡΡΠΈΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ½ΡΡΡ Π΅Π³ΠΎ.
ΠΠ΅ΡΠΎΠ΄Ρ before_commit() ΠΈ after_commit() Π±ΡΠ΄ΡΡ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π΄Π²Π° ΡΠΎΠ±ΡΡΠΈΡ ΠΈΠ· SQLAlchemy, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ before ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅Π°Π½Ρ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ» Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΌΠΎΠ³Ρ Π³Π»ΡΠ½ΡΠ² Π½Π° Π½Π΅Π³ΠΎ Π²ΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±ΡΠ΄ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ ΠΈ ΡΠ΄Π°Π»Π΅Π½Ρ, Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΊΠ°ΠΊ session.new session.dirty ΠΈ session.deleted ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠ΅Π°Π½ΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΡ Π΄ΠΎ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ. Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ session._changes ΡΠ»ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΌΠ΅ΡΡΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΆΠΈΠ²Π΅Ρ Π²ΡΠ΅ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠ΅Π°Π½ΡΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π°Π½Ρ ΠΏΠΎΡΠΈΠΊΡΠΈΡΡΡ Ρ Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Elasticsearch.
ΠΠ΅ΡΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° reindex() β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈΠ· ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ. ΠΡ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Ρ Π΄Π΅Π»Π°Π» ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΈΠ· ΡΠ΅Π°Π½ΡΠ° ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Python Π²ΡΡΠ΅, ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ Π²ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄, Ρ ΠΌΠΎΠ³Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ Post.reindex(), ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π² ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΠΈΡΠΊΠ° (search index).
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Ρ db.event.listen() Π½Π΅ Π²Ρ ΠΎΠ΄ΡΡ Π² ΠΊΠ»Π°ΡΡ, Π° ΡΠ»Π΅Π΄ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π½Π΅Π³ΠΎ. ΠΠ½ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ before ΠΈ after Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Post Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
app/models.py: ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ SearchableMixin class Π² Post model.
Π― ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ reindex() Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΈΠ· Π²ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ :
Π€ΠΎΡΠΌΠ° ΠΏΠΎΠΈΡΠΊΠ°
ΠΡΠΎΠ΄Π΅Π»Π°Π½Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°ΠΏΡΡΠΆΠ΅Π½Π½Π°Ρ ΡΠ°Π±ΠΎΡΠ° ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π΅Π΅ ΠΏΠΎΠ½ΡΡΡ. ΠΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠΈΡΠΊΠΎΠΌ Π½Π° ΡΠΎΠ΄Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² Π±Π»ΠΎΠ³Π΅. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄Π»Ρ Π²Π΅Π±-ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠΈΡΠΊΠ° Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π°, ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ q Π² ΡΡΡΠΎΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠ° URL-Π°Π΄ΡΠ΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π½Π°ΠΉΡΠΈ Python Π² Google, ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ ΠΏΠ°ΡΡ ΡΠ΅ΠΊΡΠ½Π΄, ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π²Π²Π΅ΡΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ URL-Π°Π΄ΡΠ΅Ρ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ°, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ:
Π Π°Π·ΡΠ΅ΡΠΈΡΡ ΠΏΠΎΠΈΡΠΊΡ Π±ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π² URL-Π°Π΄ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π»ΡΠ΄ΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π½Π°ΠΆΠ°Π² Π½Π° ΡΡΡΠ»ΠΊΡ ΠΏΠΎΠ»ΡΡΠ°Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΠΏΠΎΠΈΡΠΊΠ°.
ΠΠΎΡ ΠΊΠ»Π°ΡΡ ΡΠΎΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ°, ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌ ΠΏΠΎΠ»Π΅ΠΌ q :
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠ° ΡΠΎΡΠΌΠ° Π±ΡΠ»Π° Π²ΠΈΠ΄Π½Π° Π½Π° Π²ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΠ°Ρ , ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° SearchForm Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΡΡΠ°Π½ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΡΠ΅Π» Π² ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄Π»Ρ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Ρ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΡΠΌΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠ°ΡΡΡΡΡΠ΅ (route), Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠΎΡΠΌΡ Π²ΡΠ΅ΠΌ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ (templates), Ρ ΠΏΠΎΠΊΠ°ΠΆΡ Π²Π°ΠΌ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΡΡΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΡΠ°Π½ΡΠ΅Ρ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π― ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ before_request ΡΠ°Π½ΡΡΠ΅, Π΅ΡΠ΅ Π² Π³Π»Π°Π²Π΅ 6, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π’ΠΎ, ΡΡΠΎ Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΡ ΡΠΎΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½ΠΎ Ρ ΠΈΠ·ΡΠΌΠΈΠ½ΠΊΠΎΠΉ:
app/main/routes.py: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° Π² before_request handler.
app/templates/base.html: ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° Π² ΠΏΠ°Π½Π΅Π»ΠΈ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π² Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠΈΡΠΊΠ°-ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ°. ΠΡΠ° view β ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π° ΠΊ ΠΌΠ°ΡΡΡΡΡΡ /search, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΎΠΈΡΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ http://localhost:5000/search?q=search-words, ΠΊΠ°ΠΊ ΠΈ Google.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ Π±ΡΠ΄ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½Ρ, Π²ΡΠ΅, ΡΡΠΎ ΠΎΡΡΠ°Π»ΠΎΡΡ-ΡΡΠΎ ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΡΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. Π― ΠΌΠΎΠ³ Π±Ρ Π½Π°ΠΉΡΠΈ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ index.html ΡΠ°Π±Π»ΠΎΠ½ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ°, Π½ΠΎ ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ»ΠΈΡΠΈΠΉ, Ρ ΡΠ΅ΡΠΈΠ» ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ search.html ΡΠ°Π±Π»ΠΎΠ½, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ°, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ _post.html sub-ΡΠ°Π±Π»ΠΎΠ½ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ°:
app/templates/search.html: Π¨Π°Π±Π»ΠΎΠ½ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ°.
ΠΠΎΠ³ΠΈΠΊΠ° ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠ»ΠΎΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π³ΠΊΠ° Π·Π°ΠΏΡΡΠ°Π½Π½ΠΎΠΉ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Bootstrap Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ.
Π’ΡΠ΄Π° Π‘ΡΠ΄Π°