F.56. tsearch2
ÐодÑÐ»Ñ tsearch2 пÑедоÑÑавлÑÐµÑ ÑÑнкÑионалÑноÑÑÑ ÑекÑÑового поиÑка Ð´Ð»Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑи Ñ Ð¿ÑиложениÑми, коÑоÑÑе иÑполÑзовали tsearch2 до Ñого, как ÑекÑÑовÑй поиÑк бÑл инÑегÑиÑован в ÑдÑо PostgreSQL в веÑÑии 8.3.
F.56.1. ÐопÑоÑÑ Ð¿ÐµÑеноÑимоÑÑи
ХоÑÑ Ð²ÑÑÑоеннÑе ÑÑнкÑии ÑекÑÑового поиÑка бÑли оÑÐ½Ð¾Ð²Ð°Ð½Ñ Ð½Ð° ÑÑнкÑиÑÑ tsearch2 и во многом Ð¿Ð¾Ñ Ð¾Ð¶Ð¸, еÑÑÑ ÑÑд неболÑÑÐ¸Ñ ÑазлиÑий, из-за коÑоÑÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÑÑ Ð²Ð¾Ð¿ÑоÑÑ Ð¿ÐµÑеноÑимоÑÑи Ñ ÑÑÑеÑÑвÑÑÑими пÑиложениÑми:
ÐÑли Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ Ð¸Ð¼ÐµÐ½Ð° некоÑоÑÑÑ ÑÑнкÑий, напÑÐ¸Ð¼ÐµÑ ÑÑнкÑиÑ
rankÑÑалаts_rank. ÐодÑÐ»Ñ Ð·Ð°Ð¼ÐµÐ½Ñtsearch2пÑедоÑÑавлÑÐµÑ Ð¿ÑÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼Ñ Ð´Ð»Ñ ÑÑаÑÑÑ Ð¸Ð¼Ñн.ÐÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸ ÑÑнкÑии вÑÑÑоенного ÑекÑÑового поиÑка ÑÑÑеÑÑвÑÑÑ Ð² ÑиÑÑемной ÑÑ ÐµÐ¼Ðµ
pg_catalog. ÐÑи ÑÑÑановке из tsearch2 ÑÑи обÑекÑÑ Ð¾Ð±ÑÑно помеÑалиÑÑ Ð² ÑÑ ÐµÐ¼Ñpublic, Ñ Ð¾ÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе полÑзоваÑели могли помеÑÑиÑÑ Ð¸Ñ Ð² ÑпеÑиалÑнÑÑ Ð¾ÑделÑнÑÑ ÑÑ ÐµÐ¼Ñ. Таким обÑазом, ÑÑÑлки на обÑекÑÑ, дополненнÑе ÑÑ ÐµÐ¼Ð¾Ð¹, окажÑÑÑÑ Ð½ÐµÑабоÑими в лÑбом ÑлÑÑае. ÐодÑÐ»Ñ Ð·Ð°Ð¼ÐµÐ½Ñtsearch2пÑедоÑÑавлÑÐµÑ Ð´Ð»Ñ ÑÑÐ¸Ñ Ð¾Ð±ÑекÑов пÑевдонимÑ, коÑоÑÑе помеÑаÑÑÑÑ Ð² ÑÑ ÐµÐ¼Ñpublic(или дÑÑгÑÑ, еÑли ÑÑо ÑÑебÑеÑÑÑ), ÑÑÐ¾Ð±Ñ Ñакие ÑÑÑлки пÑодолжали ÑабоÑаÑÑ.ÐÐ»Ñ Ð²ÑÑÑоеннÑÑ ÑÑнкÑий ÑекÑÑового поиÑка оÑÑÑÑÑÑвÑÑÑ Ð¿Ð¾Ð½ÑÑÐ¸Ñ Â«ÑекÑÑий анализаÑоÑ» и «ÑекÑÑий ÑловаÑÑ», еÑÑÑ ÑолÑко ÑекÑÑÐ°Ñ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð¿Ð¾Ð¸Ñка (она задаÑÑÑÑ Ð¿Ð°ÑамеÑÑом
default_text_search_config). ХоÑÑ ÑекÑÑий анализаÑÐ¾Ñ Ð¸ ÑекÑÑий ÑловаÑÑ Ð¸ÑполÑзовалиÑÑ ÑанÑÑе ÑолÑко ÑÑнкÑиÑми, пÑедназнаÑеннÑми Ð´Ð»Ñ Ð¾Ñладки, ÑÑо вÑÑ Ð¶Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð¼ÐµÑаÑÑ Ð¿ÐµÑеноÑимоÑÑи в некоÑоÑÑÑ ÑлÑÑаÑÑ . ÐодÑÐ»Ñ Ð·Ð°Ð¼ÐµÐ½Ñtsearch2имиÑиÑÑÐµÑ ÑÑи дополниÑелÑнÑе пеÑеменнÑе ÑоÑÑоÑÐ½Ð¸Ñ Ð¸ пÑедоÑÑавлÑÐµÑ Ð¾Ð±ÑаÑно-ÑовмеÑÑимÑе ÑÑнкÑии, позволÑÑÑие задаÑÑ Ð¸ пÑоÑиÑаÑÑ Ð¸Ñ .
ÐÑÑÑ ÑÑд пÑоблем, ÑеÑÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑÑÑ
не пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ Ð¼Ð¾Ð´ÑÐ»Ñ tsearch2, Ñак ÑÑо код пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑидÑÑÑÑ ÐºÐ¾ÑÑекÑиÑоваÑÑ Ð² лÑбом ÑлÑÑае:
СÑаÑÐ°Ñ ÑÑиггеÑÐ½Ð°Ñ ÑÑнкÑиÑ
tsearch2могла пÑинимаÑÑ Ð² ÑпиÑке аÑгÑменÑов имена ÑÑнкÑий, вÑзÑваемÑÑ Ñ ÑекÑÑовÑми даннÑми до Ñого, как они бÑли пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² ÑоÑмаÑtsvector. ÐÑа возможноÑÑÑ Ð±Ñла ликвидиÑована как ÑгÑоза безопаÑноÑÑи, Ñак как нелÑÐ·Ñ Ð³Ð°ÑанÑиÑоваÑÑ, ÑÑо вÑзÑваÑÑÑÑ Ð±ÑÐ´ÐµÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ запланиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑÑнкÑиÑ. ÐÑли даннÑе нÑжно как-Ñо обÑабоÑаÑÑ Ð¿ÐµÑед индекÑаÑией, ÑекомендÑеÑÑÑ Ð½Ð°Ð¿Ð¸ÑаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй ÑÑиггеÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð´ÐµÐ»Ð°ÑÑ ÑÑо Ñам.ÐнÑоÑмаÑÐ¸Ñ Ð¾ конÑигÑÑаÑии ÑекÑÑового поиÑка бÑла пеÑенеÑена в ÑиÑÑемнÑе каÑалоги, коÑоÑÑе знаÑиÑелÑно оÑлиÑаÑÑÑÑ Ð¾Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñного пÑедназнаÑÐµÐ½Ð¸Ñ Ð² tsearch2. ÐÑе пÑиложениÑ, анализиÑÑÑÑие или модиÑиÑиÑÑÑÑие ÑÑи ÑаблиÑÑ, нÑждаÑÑÑÑ Ð² коÑÑекÑиÑовке.
Ðли пÑиложение иÑполÑзÑÐµÑ ÐºÐ°ÐºÐ¸Ðµ-либо неÑÑандаÑÑнÑе конÑигÑÑаÑии ÑекÑÑового поиÑка, Ð¸Ñ Ð½Ñжно бÑÐ´ÐµÑ Ð½Ð°ÑÑÑоиÑÑ Ð² ÑиÑÑемнÑÑ ÐºÐ°ÑÐ°Ð»Ð¾Ð³Ð°Ñ , пÑименив новÑе SQL-ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÐºÐ¾Ð½ÑигÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑекÑÑового поиÑка. ÐодÑÐ»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ
tsearch2пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ Ð½ÐµÐ±Ð¾Ð»ÑÑÑÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð² ÑÑом, позволÑÑ Ð·Ð°Ð³ÑÑжаÑÑ ÑÑаÑÑй Ð½Ð°Ð±Ð¾Ñ ÐºÐ¾Ð½ÑигÑÑаÑионнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ tsearch2 в PostgreSQL 8.3. (Ðез ÑÑого модÑÐ»Ñ Ð·Ð°Ð³ÑÑзиÑÑ Ð´Ð°Ð½Ð½Ñе конÑигÑÑаÑии невозможно, Ñак как знаÑÐµÐ½Ð¸Ñ Ð² ÑÑолбÑаÑregprocedureнелÑÐ·Ñ ÑопоÑÑавиÑÑ Ñ ÑÑнкÑиÑми.) ÐÑи ÑаблиÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии на Ñамом деле не бÑдÑÑ Ð½Ð¸Ñего делаÑÑ, но Ð¸Ñ ÑодеÑжимое бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ñ Ð¾ÑÑ Ð±Ñ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑнÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð² 8.3.СÑаÑÑе ÑÑнкÑии
reset_tsearch()иget_covers()не поддеÑживаÑÑÑÑ.ÐодÑÐ»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ
tsearch2не опÑеделÑÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ðµ пÑÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑов, полноÑÑÑÑ ÑаÑÑÑиÑÑÐ²Ð°Ñ Ð½Ð° вÑÑÑоеннÑе. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ Ð¿ÑоблемÑ, еÑли в пÑиложении иÑполÑзовалиÑÑ Ð¸Ð¼ÐµÐ½Ð° опеÑаÑоÑов Ñ ÑвнÑм Ñказанием ÑÑ ÐµÐ¼Ñ, ÑÑо вÑÑÑеÑаеÑÑÑ Ð¾ÑÐµÐ½Ñ Ñедко.
F.56.2. ÐÑеобÑазование инÑÑаллÑÑии веÑÑии до 8.3
ÐбновлÑÑÑ Ð¸Ð½ÑÑаллÑÑÐ¸Ñ Ð²ÐµÑÑии до 8.3, в коÑоÑой иÑполÑзовалоÑÑ ÑаÑÑиÑение tsearch2, ÑекомендÑеÑÑÑ ÑледÑÑÑим обÑазом:
ÐÑгÑÑзиÑе даннÑе ÑÑаÑой инÑÑаллÑÑии обÑÑнÑм ÑпоÑобом, не иÑполÑзÑÑ ÐºÐ»ÑÑ
-c(--clean) пÑогÑÐ°Ð¼Ð¼Ñ pg_dump или pg_dumpall.Рновой инÑÑаллÑÑии ÑоздайÑе пÑÑÑÑе Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸ ÑÑÑановиÑе модÑÐ»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ
tsearch2в каждÑÑ Ð±Ð°Ð·Ñ, где бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑекÑÑовÑй поиÑк. ÐÑо нÑжно ÑделаÑÑ Ð´Ð¾ загÑÑзки даннÑÑ Ð² базÑ! ÐÑли в ÑÑаÑой инÑÑаллÑÑии обÑекÑÑ tsearch2 ÑодеÑжалиÑÑ Ð² ÑÑ ÐµÐ¼Ðµ, оÑлиÑной оÑpublic, обÑзаÑелÑно оÑÑазиÑе ÑÑо в командеCREATE EXTENSION, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¼ÐµÐ½ÑÑÑие обÑекÑÑ ÑоздавалиÑÑ Ð² Ñой же ÑÑ ÐµÐ¼Ðµ.ÐагÑÑзиÑе вÑгÑÑженнÑе даннÑе. ÐÑи ÑÑом могÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð¾Ñибки из-за невозможноÑÑи воÑÑоздаÑÑ Ð¿ÐµÑвонаÑалÑнÑе обÑекÑÑ tsearch2. ХоÑÑ Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ игноÑиÑоваÑÑ, ÑÑо знаÑиÑ, ÑÑо Ð²Ñ Ð½Ðµ ÑможеÑе воÑÑÑановиÑÑ Ð²ÑгÑÑженнÑе даннÑе в одной ÑÑанзакÑии (Ñо еÑÑÑ, нелÑÐ·Ñ Ð¸ÑполÑзоваÑÑ ÐºÐ»ÑÑ
-1ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ pg_restore).ÐзÑÑиÑе ÑодеÑжимое воÑÑÑановленнÑÑ ÐºÐ¾Ð½ÑигÑÑаÑионнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ tsearch2 (
pg_ts_cfgи Ñ. д.) и ÑоздайÑе аналогиÑнÑе конÑигÑÑаÑии ÑекÑÑового поиÑка по поÑÑебноÑÑи. ÐолÑÑив из ÑÑаÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑионнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð²ÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½ÑÑ Ð¸Ð½ÑоÑмаÑиÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑдалиÑÑ Ð¸Ñ .ÐÑоÑеÑÑиÑÑйÑе ÑабоÑÑ Ð¿ÑиложениÑ.
Ðозже Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе поменÑÑÑ ÑÑÑлки в пÑиложении на пÑÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼Ñ Ð¾Ð±ÑекÑов ÑекÑÑового поиÑка, ÑÑо Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð² конÑе конÑов ÑдалиÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ tsearch2.
F.56.3. СÑÑлки
Ð¡Ð°Ð¹Ñ ÑазÑабоÑки Tsearch2 http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/