12.3. УпÑавление ÑекÑÑовÑм поиÑком
ÐÐ»Ñ ÑеализаÑии полноÑекÑÑового поиÑка необÑ
Ð¾Ð´Ð¸Ð¼Ñ ÑÑнкÑии, позволÑÑÑие ÑоздаÑÑ tsvector из докÑменÑа и tsquery из запÑоÑа полÑзоваÑелÑ. ÐÑоме Ñого, ÑезÑлÑÑаÑÑ Ð½Ñжно вÑдаваÑÑ Ð² Ñдобном поÑÑдке, Ñак ÑÑо нам поÑÑебÑеÑÑÑ ÑÑнкÑиÑ, оÑениваÑÑÐ°Ñ ÑелеванÑноÑÑÑ Ð´Ð¾ÐºÑменÑа Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ запÑоÑа. Ðажно Ñакже имеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð²ÑводиÑÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð½Ñй ÑекÑÑ Ð¿Ð¾Ð´Ñ
одÑÑим обÑазом. Ð Postgres Pro еÑÑÑ Ð²Ñе необÑ
одимÑе Ð´Ð»Ñ ÑÑого ÑÑнкÑии.
12.3.1. Ð Ð°Ð·Ð±Ð¾Ñ Ð´Ð¾ÐºÑменÑов
ÐÐ»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾ÐºÑменÑа в Ñип tsvector Postgres Pro пÑедоÑÑавлÑÐµÑ ÑÑнкÑÐ¸Ñ to_tsvector.
to_tsvector([конÑигÑÑаÑиÑregconfig,]докÑменÑtext) returnstsvector
to_tsvector ÑазбиÑÐ°ÐµÑ ÑекÑÑовÑй докÑÐ¼ÐµÐ½Ñ Ð½Ð° ÑÑагменÑÑ, ÑÐ²Ð¾Ð´Ð¸Ñ ÑÑагменÑÑ Ðº лекÑемам и возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение tsvector, в коÑоÑом пеÑеÑиÑлÑÑÑÑÑ Ð»ÐµÐºÑÐµÐ¼Ñ Ð¸ иÑ
позиÑии в докÑменÑе. ÐÑи обÑабоÑке докÑменÑа иÑполÑзÑеÑÑÑ ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ ÑекÑÑового поиÑка или конÑигÑÑаÑÐ¸Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐÑоÑÑой пÑимеÑ:
SELECT to_tsvector('english', 'a fat cat sat on a mat - it ate a fat rats');
to_tsvector
-----------------------------------------------------
'ate':9 'cat':3 'fat':2,11 'mat':7 'rat':12 'sat':4
Ð ÑÑом пÑимеÑе Ð¼Ñ Ð²Ð¸Ð´Ð¸Ð¼, ÑÑо ÑезÑлÑÑиÑÑÑÑий tsvector не ÑодеÑÐ¶Ð¸Ñ Ñлова a, on и it, Ñлово rats пÑевÑаÑилоÑÑ rat, а знак пÑÐµÐ¿Ð¸Ð½Ð°Ð½Ð¸Ñ Â«-» бÑл пÑоигноÑиÑован.
ФÑнкÑÐ¸Ñ to_tsvector внÑÑÑи вÑзÑÐ²Ð°ÐµÑ Ð°Ð½Ð°Ð»Ð¸Ð·Ð°ÑоÑ, коÑоÑÑй ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ ÑекÑÑ Ð´Ð¾ÐºÑменÑа на ÑÑагменÑÑ Ð¸ клаÑÑиÑиÑиÑÑÐµÑ Ð¸Ñ
. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑÑагменÑа она пÑовеÑÑÐµÑ ÑпиÑок ÑловаÑей (Раздел 12.6), опÑеделÑемÑй Ñипом ÑÑагменÑа. ÐеÑвÑй же ÑловаÑÑ, ÑаÑпознавÑий ÑÑагменÑ, вÑдаÑÑ Ð¾Ð´Ð½Ñ Ð¸Ð»Ð¸ неÑколÑко пÑедÑÑавлÑÑÑиÑ
его лекÑем. ÐапÑимеÑ, rats пÑевÑаÑаеÑÑÑ Ð² rat, Ñак как один из ÑловаÑей понимаеÑ, ÑÑо Ñлово rats â ÑÑо Ñлово rat во множеÑÑвенном ÑиÑле. ÐекоÑоÑое Ñлова ÑаÑпознаÑÑÑÑ ÐºÐ°Ðº ÑÑоп-Ñлова (ÐодÑаздел 12.6.1) и игноÑиÑÑÑÑÑÑ ÐºÐ°Ðº Ñлова, ÑигÑÑиÑÑÑÑие в ÑекÑÑе наÑÑолÑко ÑаÑÑо, ÑÑо иÑкаÑÑ Ð¸Ñ
беÑÑмÑÑленно. РнаÑем пÑимеÑе ÑÑо a, on и it. ÐÑли ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ Ð½Ðµ воÑпÑинимаеÑÑÑ Ð½Ð¸ одним ÑловаÑÑм из ÑпиÑка, он Ñак же игноÑиÑÑеÑÑÑ. Рданном пÑимеÑе ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ñо знаком пÑÐµÐ¿Ð¸Ð½Ð°Ð½Ð¸Ñ -, Ñак как Ñ Ñаким Ñипом ÑÑагменÑа (ÑимволÑ-ÑазделиÑели) не ÑвÑзан никакой ÑловаÑÑ Ð¸ знаÑÐ¸Ñ Ñакие ÑÑагменÑÑ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не бÑдÑÑ Ð¸Ð½Ð´ÐµÐºÑиÑоваÑÑÑÑ. ÐÑÐ±Ð¾Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð°ÑоÑа, ÑловаÑей и индекÑиÑÑемÑÑ
Ñипов ÑÑагменÑов опÑеделÑеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑией ÑекÑÑового поиÑка (Раздел 12.7). Родной базе даннÑÑ
можно иÑполÑзоваÑÑ ÑазнÑе конÑигÑÑаÑии, в Ñом ÑиÑле, пÑедопÑеделÑннÑе конÑигÑÑаÑии Ð´Ð»Ñ ÑазнÑÑ
ÑзÑков. РнаÑем пÑимеÑе Ð¼Ñ Ð¸ÑполÑзовали конÑигÑÑаÑÐ¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð°Ð½Ð³Ð»Ð¸Ð¹Ñкого ÑзÑка â english.
ÐÐ»Ñ Ð½Ð°Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑлеменÑам tsvector ÑазнÑÑ
веÑов иÑполÑзÑеÑÑÑ ÑÑнкÑÐ¸Ñ setweight. ÐÐµÑ ÑлеменÑа задаÑÑÑÑ Ð±Ñквой A, B, C или D. ÐбÑÑно ÑÑо пÑименÑеÑÑÑ Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð²Ð°Ð¶Ð½Ð¾ÑÑи Ñлов в ÑазнÑÑ
ÑаÑÑÑÑ
докÑменÑа, напÑÐ¸Ð¼ÐµÑ Ð² заголовке или в Ñеле докÑменÑа. ÐаÑем ÑÑа инÑоÑмаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð¿Ñи ÑанжиÑовании ÑезÑлÑÑаÑов поиÑка.
Так как to_tsvector(NULL) веÑнÑÑ NULL, Ð¼Ñ ÑовеÑÑем иÑполÑзоваÑÑ coalesce везде, где ÑооÑвеÑÑÑвÑÑÑее поле Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ NULL. СоздаваÑÑ tsvector из ÑÑÑÑкÑÑÑиÑованного докÑменÑа ÑекомендÑеÑÑÑ Ñак:
UPDATE tt SET ti =
setweight(to_tsvector(coalesce(title,'')), 'A') ||
setweight(to_tsvector(coalesce(keyword,'')), 'B') ||
setweight(to_tsvector(coalesce(abstract,'')), 'C') ||
setweight(to_tsvector(coalesce(body,'')), 'D'); ÐдеÑÑ Ð¼Ñ Ð¸ÑполÑзовали setweight Ð´Ð»Ñ Ð¿Ð¾Ð¼ÐµÑки пÑоиÑÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ лекÑÐµÐ¼Ñ Ð² ÑÑоÑмиÑованнÑÑ
знаÑениÑÑ
tsvector и обÑединили помеÑеннÑе знаÑÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑа конкаÑенаÑии Ñипов tsvector ||. (ÐодÑобнее ÑÑи опеÑаÑии ÑаÑÑмаÑÑиваÑÑÑÑ Ð² ÐодÑазделе 12.4.1.)
12.3.2. Ð Ð°Ð·Ð±Ð¾Ñ Ð·Ð°Ð¿ÑоÑов
Postgres Pro пÑедоÑÑавлÑÐµÑ ÑÑнкÑии to_tsquery, plainto_tsquery, phraseto_tsquery и websearch_to_tsquery Ð´Ð»Ñ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа к ÑÐ¸Ð¿Ñ tsquery. ФÑнкÑÐ¸Ñ to_tsquery даÑÑ Ð±Ð¾Ð»ÑÑе возможноÑÑей, Ñем plainto_tsquery или phraseto_tsquery, но более ÑÑÑога к вÑ
однÑм даннÑм. ФÑнкÑÐ¸Ñ websearch_to_tsquery пÑедÑÑавлÑÐµÑ Ñобой ÑпÑоÑÑннÑÑ Ð²ÐµÑÑÐ¸Ñ to_tsquery Ñ Ð°Ð»ÑÑеÑнаÑивнÑм ÑинÑакÑиÑом, подобнÑм ÑомÑ, ÑÑо пÑинÑÑ Ð² поиÑковÑÑ
ÑиÑÑемаÑ
в ÐнÑеÑнеÑе.
to_tsquery([конÑигÑÑаÑиÑregconfig,]ÑекÑÑ_запÑоÑаtext) returnstsquery
to_tsquery ÑоздаÑÑ Ð·Ð½Ð°Ñение tsquery из ÑекÑÑа_запÑоÑа, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ ÑоÑÑоÑÑÑ Ð¸Ð· пÑоÑÑÑÑ
ÑÑагменÑов, ÑазделÑннÑÑ
логиÑеÑкими опеÑаÑоÑами tsquery: & (Ð), | (ÐÐÐ), ! (ÐÐ) и <-> (ÐÐ ÐÐШÐСТÐУÐТ), возможно, ÑгÑÑппиÑованнÑÑ
Ñкобками. ÐÑÑгими Ñловами, вÑ
одное знаÑение Ð´Ð»Ñ to_tsquery должно Ñже ÑооÑвеÑÑÑвоваÑÑ Ð¾Ð±Ñим пÑавилам Ð´Ð»Ñ Ð·Ð½Ð°Ñений tsquery, опиÑаннÑм в ÐодÑазделе 8.11.2. РазлиÑие иÑ
ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо во вводимом в tsquery знаÑении ÑÑагменÑÑ Ð²Ð¾ÑпÑинимаÑÑÑÑ Ð±ÑквалÑно, Ñогда как to_tsquery ноÑмализÑÐµÑ ÑÑагменÑÑ, пÑÐ¸Ð²Ð¾Ð´Ñ Ð¸Ñ
к лекÑемам, иÑполÑзÑÑ Ñвно ÑказаннÑÑ Ð¸Ð»Ð¸ подÑазÑмеваемÑÑ ÐºÐ¾Ð½ÑигÑÑаÑиÑ, и оÑбÑаÑÑÐ²Ð°Ñ ÑÑоп-Ñлова. ÐапÑимеÑ:
SELECT to_tsquery('english', 'The & Fat & Rats');
to_tsquery
---------------
'fat' & 'rat'
Ðак и пÑи вводе знаÑÐµÐ½Ð¸Ñ tsquery, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ лекÑÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ Ð²ÐµÑ(а), ÑÑÐ¾Ð±Ñ Ð¿Ñи поиÑке можно бÑло вÑбÑаÑÑ Ð¸Ð· tsvector ÑолÑко лекÑÐµÐ¼Ñ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñми веÑами. ÐапÑимеÑ:
SELECT to_tsquery('english', 'Fat | Rats:AB');
to_tsquery
------------------
'fat' | 'rat':AB
РлекÑеме Ñакже можно добавиÑÑ *, опÑеделив Ñаким обÑазом ÑÑловие поиÑка по пÑеÑикÑÑ:
SELECT to_tsquery('supern:*A & star:A*B');
to_tsquery
--------------------------
'supern':*A & 'star':*AB
Ð¢Ð°ÐºÐ°Ñ Ð»ÐµÐºÑема бÑÐ´ÐµÑ ÑооÑвеÑÑÑвоваÑÑ Ð»ÑÐ±Ð¾Ð¼Ñ ÑÐ»Ð¾Ð²Ñ Ð² tsvector, наÑинаÑÑемÑÑÑ Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ подÑÑÑоки.
to_tsquery Ð¼Ð¾Ð¶ÐµÑ Ñакже пÑинимаÑÑ ÑÑÐ°Ð·Ñ Ð² апоÑÑÑоÑаÑ
. ÐÑо полезно в оÑновном когда конÑигÑÑаÑÐ¸Ñ Ð²ÐºÐ»ÑÑÐ°ÐµÑ ÑезаÑÑÑÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ Ñакие ÑÑазÑ. Рпоказанном ниже пÑимеÑе пÑедполагаеÑÑÑ, ÑÑо ÑезаÑÑÑÑ ÑодеÑÐ¶Ð¸Ñ Ð¿Ñавило supernovae stars : sn:
SELECT to_tsquery('''supernovae stars'' & !crab');
to_tsquery
---------------
'sn' & !'crab'
ÐÑли ÑбÑаÑÑ ÑÑи апоÑÑÑоÑÑ, to_tsquery не пÑÐ¸Ð¼ÐµÑ ÑÑагменÑÑ, не ÑазделÑннÑе опеÑаÑоÑами Ð, ÐÐРи ÐÐ ÐÐШÐСТÐУÐТ, и вÑдаÑÑ ÑинÑакÑиÑеÑкÑÑ Ð¾ÑибкÑ.
plainto_tsquery([конÑигÑÑаÑиÑregconfig,]ÑекÑÑ_запÑоÑаtext) returnstsquery
plainto_tsquery пÑеобÑазÑÐµÑ Ð½ÐµÑоÑмаÑиÑованнÑй ÑекÑÑ_запÑоÑа в знаÑение tsquery. ТекÑÑ ÑазбиÑаеÑÑÑ Ð¸ ноÑмализÑеÑÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ ÑомÑ, как ÑÑо Ð´ÐµÐ»Ð°ÐµÑ to_tsvector, а заÑем Ð¼ÐµÐ¶Ð´Ñ Ð¾ÑÑавÑимиÑÑ Ñловами вÑÑавлÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ & (Ð) Ñипа tsquery.
ÐÑимеÑ:
SELECT plainto_tsquery('english', 'The Fat Rats');
plainto_tsquery
-----------------
'fat' & 'rat'
ÐамеÑÑÑе, ÑÑо plainto_tsquery не ÑаÑÐ¿Ð¾Ð·Ð½Ð°ÐµÑ Ð²Ð¾ вÑ
одной ÑÑÑоке опеÑаÑоÑÑ tsquery, меÑки веÑов или обознаÑÐµÐ½Ð¸Ñ Ð¿ÑеÑикÑов:
SELECT plainto_tsquery('english', 'The Fat & Rats:C');
plainto_tsquery
---------------------
'fat' & 'rat' & 'c'
Рданном ÑлÑÑае вÑе знаки пÑнкÑÑаÑии бÑли оÑбÑоÑÐµÐ½Ñ ÐºÐ°Ðº ÑимволÑ-ÑазделиÑели.
phraseto_tsquery([конÑигÑÑаÑиÑregconfig,]ÑекÑÑ_запÑоÑаtext) returnstsquery
phraseto_tsquery ведÑÑ ÑÐµÐ±Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ plainto_tsquery, за иÑклÑÑением Ñого, ÑÑо она вÑÑавлÑÐµÑ Ð¼ÐµÐ¶Ð´Ñ Ð¾ÑÑавÑимиÑÑ Ñловами опеÑаÑÐ¾Ñ <-> (ÐÐ ÐÐШÐСТÐУÐТ) вмеÑÑо опеÑаÑоÑа & (Ð). ÐÑоме Ñого, ÑÑоп-Ñлова не пÑоÑÑо оÑбÑаÑÑваÑÑÑÑ, а подÑÑиÑÑваÑÑÑÑ, и вмеÑÑо опеÑаÑоÑов <-> иÑполÑзÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ < Ñ Ð¿Ð¾Ð´ÑÑиÑаннÑм ÑиÑлом. ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð° пÑи поиÑке ÑоÑнÑÑ
поÑледоваÑелÑноÑÑей лекÑем, Ñак как опеÑаÑоÑÑ ÐÐ ÐÐШÐСТÐУÐТ пÑовеÑÑÑÑ Ð½Ðµ ÑолÑко налиÑие вÑеÑ
лекÑем, но и иÑ
поÑÑдок.N>
ÐÑимеÑ:
SELECT phraseto_tsquery('english', 'The Fat Rats');
phraseto_tsquery
------------------
'fat' <-> 'rat'
Ðак и plainto_tsquery, ÑÑнкÑÐ¸Ñ phraseto_tsquery не ÑаÑÐ¿Ð¾Ð·Ð½Ð°ÐµÑ Ð²Ð¾ вÑ
одной ÑÑÑоке опеÑаÑоÑÑ Ñипа tsquery, меÑки веÑов или обознаÑÐµÐ½Ð¸Ñ Ð¿ÑеÑикÑов:
SELECT phraseto_tsquery('english', 'The Fat & Rats:C');
phraseto_tsquery
-----------------------------
'fat' <-> 'rat' <-> 'c'
websearch_to_tsquery([конÑигÑÑаÑиÑregconfig,]ÑекÑÑ_запÑоÑаtext) returnstsquery
ФÑнкÑÐ¸Ñ websearch_to_tsquery ÑоздаÑÑ Ð·Ð½Ð°Ñение tsquery из ÑекÑÑа_запÑоÑа, иÑполÑзÑÑ Ð°Ð»ÑÑеÑнаÑивнÑй ÑинÑакÑиÑ, в коÑоÑом запÑÐ¾Ñ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð¿ÑоÑÑо неÑоÑмаÑиÑованнÑм ÑекÑÑом. РоÑлиÑие Ð¾Ñ plainto_tsquery и phraseto_tsquery, она Ñакже пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð¿ÑеделÑннÑе опеÑаÑоÑÑ. Ðолее Ñого, ÑÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ должна никогда вÑдаваÑÑ ÑинÑакÑиÑеÑкие оÑибки, ÑÑо позволÑÐµÑ Ð¾ÑÑÑеÑÑвлÑÑÑ Ð¿Ð¾Ð¸Ñк по пÑоизволÑÐ½Ð¾Ð¼Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелем запÑоÑÑ. Ðна поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑледÑÑÑий ÑинÑакÑиÑ:
ÑекÑÑ Ð½Ðµ в кавÑÑкаÑ: ÑекÑÑ, не заклÑÑÑннÑй в кавÑÑки, коÑоÑÑй бÑÐ´ÐµÑ Ð¿ÑеобÑазован в Ñлова, ÑазделÑемÑе опеÑаÑоÑами&, как его воÑпÑинÑла Ð±Ñ ÑÑнкÑиÑplainto_tsquery."ÑекÑÑ Ð² кавÑÑÐºÐ°Ñ ": ÑекÑÑ, заклÑÑÑннÑй в кавÑÑки, бÑÐ´ÐµÑ Ð¿ÑеобÑазован в Ñлова, ÑазделÑемÑе опеÑаÑоÑами<->, как его воÑпÑинÑла Ð±Ñ ÑÑнкÑиÑphraseto_tsquery.OR: логиÑеÑÐºÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ÐÐРбÑÐ´ÐµÑ Ð¿ÑеобÑазована в опеÑаÑоÑ|.-: логиÑеÑÐºÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ÐÐ, пÑеобÑазÑеÑÑÑ Ð² опеÑаÑоÑ!.
ÐÑимеÑÑ:
SELECT websearch_to_tsquery('english', 'The fat rats');
websearch_to_tsquery
----------------------
'fat' & 'rat'
(1 row)
SELECT websearch_to_tsquery('english', '"supernovae stars" -crab');
websearch_to_tsquery
----------------------------------
'supernova' <-> 'star' & !'crab'
(1 row)
SELECT websearch_to_tsquery('english', '"sad cat" or "fat rat"');
websearch_to_tsquery
-----------------------------------
'sad' <-> 'cat' | 'fat' <-> 'rat'
(1 row)
SELECT websearch_to_tsquery('english', 'signal -"segmentation fault"');
websearch_to_tsquery
---------------------------------------
'signal' & !( 'segment' <-> 'fault' )
(1 row)
SELECT websearch_to_tsquery('english', '""" )( dummy \\ query <->');
websearch_to_tsquery
----------------------
'dummi' & 'queri'
(1 row)
12.3.3. РанжиÑование ÑезÑлÑÑаÑов поиÑка
РанжиÑование докÑменÑов можно пÑедÑÑавиÑÑ ÐºÐ°Ðº попÑÑÐºÑ Ð¾ÑениÑÑ, наÑколÑко они ÑелеванÑÐ½Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð·Ð°Ð¿ÑоÑÑ Ð¸ оÑÑоÑÑиÑоваÑÑ Ð¸Ñ Ñак, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ ÑелеванÑнÑе вÑводилиÑÑ Ð¿ÐµÑвÑми. Ð Postgres Pro вÑÑÑÐ¾ÐµÐ½Ñ Ð´Ð²Ðµ ÑÑнкÑии ÑанжиÑованиÑ, пÑинимаÑÑие во внимание лекÑиÑеÑкÑÑ, позиÑионнÑÑ Ð¸ ÑÑÑÑкÑÑÑнÑÑ Ð¸Ð½ÑоÑмаÑиÑ; Ñо еÑÑÑ, они ÑÑиÑÑваÑÑ, наÑколÑко ÑаÑÑо и наÑколÑко близко вÑÑÑеÑаÑÑÑÑ Ð² докÑменÑе клÑÑевÑе Ñлова и какова важноÑÑÑ ÑодеÑжаÑей Ð¸Ñ ÑаÑÑи докÑменÑа. Ðднако Ñамо понÑÑие ÑелеванÑноÑÑи доволÑно ÑазмÑÑое и во многом опÑеделÑеÑÑÑ Ð¿Ñиложением. ÐÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑ Ð´Ð»Ñ ÑанжиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ дÑÑгÑÑ Ð¸Ð½ÑоÑмаÑиÑ, напÑимеÑ, вÑÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑменÑа. ÐÑÑÑоеннÑе ÑÑнкÑии ÑанжиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑаÑÑмаÑÑиваÑÑ Ð»Ð¸ÑÑ ÐºÐ°Ðº пÑимеÑÑ ÑеализаÑии. ÐÐ»Ñ ÑÐ²Ð¾Ð¸Ñ ÐºÐ¾Ð½ÐºÑеÑнÑÑ Ð·Ð°Ð´Ð°Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑазÑабоÑаÑÑ ÑобÑÑвеннÑе ÑÑнкÑии ÑанжиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸/или ÑÑеÑÑÑ Ð¿Ñи обÑабоÑке Ð¸Ñ ÑезÑлÑÑаÑов дополниÑелÑнÑе ÑакÑоÑÑ.
Ðиже опиÑÐ°Ð½Ñ Ð´Ð²Ðµ вÑÑÑоеннÑе ÑÑнкÑии ÑанжиÑованиÑ:
-
ts_rank([веÑаfloat4[],]векÑоÑtsvector,querytsquery[,ноÑмализаÑиÑinteger]) returnsfloat4 РанжиÑÑÐµÑ Ð²ÐµÐºÑоÑÑ Ð¿Ð¾ ÑаÑÑоÑе найденнÑÑ Ð»ÐµÐºÑем.
-
ts_rank_cd([веÑаfloat4[],]векÑоÑtsvector,querytsquery[,ноÑмализаÑиÑinteger]) returnsfloat4 ÐÑа ÑÑнкÑÐ¸Ñ Ð²ÑÑиÑлÑÐµÑ Ð¿Ð»Ð¾ÑноÑÑÑ Ð¿Ð¾ÐºÑÑÑÐ¸Ñ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ векÑоÑа докÑменÑа и запÑоÑа, иÑполÑзÑÑ Ð¼ÐµÑод, ÑазÑабоÑаннÑй ÐлаÑком, ÐоÑмаком и Ð¢Ð°Ð´Ñ Ð¾Ñп и опиÑаннÑй в ÑÑаÑÑе «Relevance Ranking for One to Three Term Queries» в жÑÑнале «Information Processing and Management» в 1999 г. ÐлоÑноÑÑÑ Ð¿Ð¾ÐºÑÑÑÐ¸Ñ Ð²ÑÑиÑлÑеÑÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ ÑангÑ
ts_rank, но в ÑаÑÑÑÑ Ð±ÐµÑÑÑÑÑ ÐµÑÑ Ð¸ близоÑÑÑ ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ Ð»ÐµÐºÑем дÑÑг к дÑÑгÑ.ÐÐ»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ ÑезÑлÑÑаÑа ÑÑой ÑÑнкÑии ÑÑебÑеÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ позиÑии лекÑем. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð° игноÑиÑÑÑÑ Â«Ð¾ÑиÑеннÑе» Ð¾Ñ ÑÑой инÑоÑмаÑии лекÑÐµÐ¼Ñ Ð²
tsvector. ÐÑли во Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð½ÐµÑ Ð½ÐµÐ¾ÑиÑеннÑÑ Ð»ÐµÐºÑем, ÑезÑлÑÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ñавен нÑлÑ. (Ðа дополниÑелÑнÑми ÑведениÑми о ÑÑнкÑииstripи позиÑионной инÑоÑмаÑии в даннÑÑtsvectorобÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 12.4.1.)
ÐÐ»Ñ Ð¾Ð±ÐµÐ¸Ñ
ÑÑиÑ
ÑÑнкÑий аÑгÑÐ¼ÐµÐ½Ñ Ð²ÐµÑа позволÑÐµÑ Ð¿ÑидаÑÑ Ð±Ð¾Ð»ÑÑий или менÑÑий Ð²ÐµÑ Ñловам, в завиÑимоÑÑи Ð¾Ñ Ð¸Ñ
меÑок. РпеÑедаваемом маÑÑиве веÑов опÑеделÑеÑÑÑ, наÑколÑко веÑома ÐºÐ°Ð¶Ð´Ð°Ñ ÐºÐ°ÑегоÑÐ¸Ñ Ñлов, в ÑледÑÑÑем поÑÑдке:
{Ð²ÐµÑ D, Ð²ÐµÑ C, Ð²ÐµÑ B, Ð²ÐµÑ A}
ÐÑли ÑÑÐ¾Ñ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ð¾Ð¿ÑÑкаеÑÑÑ, подÑазÑмеваÑÑÑÑ ÑледÑÑÑие знаÑениÑ:
{0.1, 0.2, 0.4, 1.0}ÐбÑÑно веÑами вÑделÑÑÑÑÑ Ñлова из оÑобÑÑ Ð¾Ð±Ð»Ð°ÑÑей докÑменÑа, напÑÐ¸Ð¼ÐµÑ Ð¸Ð· заголовка или кÑаÑкого введениÑ, Ñ Ñем, ÑÑÐ¾Ð±Ñ ÑÑи Ñлова ÑÑиÑалиÑÑ Ð±Ð¾Ð»ÐµÐµ и менее знаÑимÑми, Ñем Ñлова в оÑновном ÑекÑÑе докÑменÑа.
Так как веÑоÑÑноÑÑÑ Ð½Ð°Ð¹Ñи клÑÑевÑе Ñлова ÑвелиÑиваеÑÑÑ Ñ ÑазмеÑом докÑменÑа, пÑи ÑанжиÑовании Ð¸Ð¼ÐµÐµÑ ÑмÑÑл ÑÑиÑÑваÑÑ ÐµÐ³Ð¾, ÑÑобÑ, напÑимеÑ, докÑÐ¼ÐµÐ½Ñ Ñ ÑоÑней Ñлов, ÑодеÑжаÑий пÑÑÑ Ð²Ñ
ождений иÑкомÑÑ
Ñлов, ÑÑиÑалÑÑ Ð±Ð¾Ð»ÐµÐµ ÑелеванÑнÑм, Ñем докÑÐ¼ÐµÐ½Ñ Ñ ÑÑÑÑÑей Ñлов и Ñеми же пÑÑÑÑ Ð²Ñ
ождениÑми. Ðбе ÑÑнкÑии ÑанжиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑинимаÑÑ ÑелоÑиÑленнÑй паÑамеÑÑ Ð½Ð¾ÑмализаÑии, опÑеделÑÑÑий, как Ñанг докÑменÑа бÑÐ´ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ ÐµÐ³Ð¾ ÑазмеÑа. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿ÑедÑÑавлÑÐµÑ Ñобой биÑовÑÑ Ð¼Ð°ÑÐºÑ Ð¸ ÑпÑавлÑÐµÑ Ð½ÐµÑколÑкими Ñежимами: Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вклÑÑиÑÑ ÑÑÐ°Ð·Ñ Ð½ÐµÑколÑко Ñежимов, обÑединив знаÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑом | (напÑÐ¸Ð¼ÐµÑ Ñак: 2|4).
0 (по ÑмолÑаниÑ): длина докÑменÑа не ÑÑиÑÑваеÑÑÑ
1: Ñанг докÑменÑа делиÑÑÑ Ð½Ð° 1 + логаÑиÑм Ð´Ð»Ð¸Ð½Ñ Ð´Ð¾ÐºÑменÑа
2: Ñанг докÑменÑа делиÑÑÑ Ð½Ð° его длинÑ
4: Ñанг докÑменÑа делиÑÑÑ Ð½Ð° ÑÑеднее гаÑмониÑеÑкое ÑаÑÑÑоÑние Ð¼ÐµÐ¶Ð´Ñ Ð±Ð»Ð¾ÐºÐ°Ð¼Ð¸ (ÑÑо Ñеализовано ÑолÑко в
ts_rank_cd)8: Ñанг докÑменÑа делиÑÑÑ Ð½Ð° ÑиÑло ÑникалÑнÑÑ Ñлов в докÑменÑе
16: Ñанг докÑменÑа делиÑÑÑ Ð½Ð° 1 + логаÑиÑм ÑиÑла ÑникалÑнÑÑ Ñлов в докÑменÑе
32: Ñанг делиÑÑÑ ÑÐ²Ð¾Ñ Ð¶Ðµ знаÑение + 1
ÐÑли вклÑÑÐµÐ½Ñ Ð½ÐµÑколÑко Ñлагов, ÑооÑвеÑÑÑвÑÑÑие опеÑаÑии вÑполнÑÑÑÑÑ Ð² показанном поÑÑдке.
Ðажно замеÑиÑÑ, ÑÑо ÑÑнкÑии ÑанжиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ иÑполÑзÑÑÑ Ð½Ð¸ÐºÐ°ÐºÑÑ Ð²Ð½ÐµÑнÑÑ Ð¸Ð½ÑоÑмаÑиÑ, Ñак ÑÑо добиÑÑÑÑ Ð½Ð¾ÑмализаÑии до 1% или 100% невозможно, Ñ
оÑÑ Ð¸Ð½Ð¾Ð³Ð´Ð° ÑÑо желаÑелÑно. ÐÑименив паÑамеÑÑ 32 (rank/(rank+1)), можно ÑвеÑÑи вÑе Ñанги к Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ñ 0..1, но ÑÑо изменение бÑÐ´ÐµÑ Ð»Ð¸ÑÑ ÐºÐ¾ÑмеÑиÑеÑким, на поÑÑдке ÑоÑÑиÑовки ÑезÑлÑÑаÑов ÑÑо не оÑÑазиÑÑÑ.
Рданном пÑимеÑе вÑбиÑаÑÑÑÑ Ð´ÐµÑÑÑÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð½ÑÑ Ð´Ð¾ÐºÑменÑов Ñ Ð¼Ð°ÐºÑималÑнÑм Ñангом:
SELECT title, ts_rank_cd(textsearch, query) AS rank
FROM apod, to_tsquery('neutrino|(dark & matter)') query
WHERE query @@ textsearch
ORDER BY rank DESC
LIMIT 10;
title | rank
-----------------------------------------------+----------
Neutrinos in the Sun | 3.1
The Sudbury Neutrino Detector | 2.4
A MACHO View of Galactic Dark Matter | 2.01317
Hot Gas and Dark Matter | 1.91171
The Virgo Cluster: Hot Plasma and Dark Matter | 1.90953
Rafting for Solar Neutrinos | 1.9
NGC 4650A: Strange Galaxy and Dark Matter | 1.85774
Hot Gas and Dark Matter | 1.6123
Ice Fishing for Cosmic Neutrinos | 1.6
Weak Lensing Distorts the Universe | 0.818218
Ð¢Ð¾Ñ Ð¶Ðµ пÑÐ¸Ð¼ÐµÑ Ñ Ð½Ð¾ÑмализованнÑм Ñангом:
SELECT title, ts_rank_cd(textsearch, query, 32 /* rank/(rank+1) */ ) AS rank
FROM apod, to_tsquery('neutrino|(dark & matter)') query
WHERE query @@ textsearch
ORDER BY rank DESC
LIMIT 10;
title | rank
-----------------------------------------------+-------------------
Neutrinos in the Sun | 0.756097569485493
The Sudbury Neutrino Detector | 0.705882361190954
A MACHO View of Galactic Dark Matter | 0.668123210574724
Hot Gas and Dark Matter | 0.65655958650282
The Virgo Cluster: Hot Plasma and Dark Matter | 0.656301290640973
Rafting for Solar Neutrinos | 0.655172410958162
NGC 4650A: Strange Galaxy and Dark Matter | 0.650072921219637
Hot Gas and Dark Matter | 0.617195790024749
Ice Fishing for Cosmic Neutrinos | 0.615384618911517
Weak Lensing Distorts the Universe | 0.450010798361481
РанжиÑование Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно доÑогоÑÑоÑÑей опеÑаÑией, Ñак как Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ñанга необÑ
одимо пÑоÑиÑаÑÑ tsvector каждого подÑ
одÑÑего докÑменÑа и ÑÑо займÑÑ Ð·Ð½Ð°ÑиÑелÑное вÑемÑ, еÑли пÑидÑÑÑÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº диÑкÑ. Ð ÑожалениÑ, избежаÑÑ ÑÑого вÑÑд ли возможно, Ñак как на пÑакÑике по многим запÑоÑам вÑдаÑÑÑÑ Ð±Ð¾Ð»ÑÑое колиÑеÑÑво ÑезÑлÑÑаÑов.
12.3.4. ÐÑделение ÑезÑлÑÑаÑов
ÐÑедÑÑавлÑÑ ÑезÑлÑÑаÑÑ Ð¿Ð¾Ð¸Ñка, в идеале нÑжно вÑделÑÑÑ ÑаÑÑÑ Ð´Ð¾ÐºÑменÑа и показÑваÑÑ, как он ÑвÑзан Ñ Ð·Ð°Ð¿ÑоÑом. ÐбÑÑно поиÑковÑе ÑиÑÑÐµÐ¼Ñ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ ÑÑагменÑÑ Ð´Ð¾ÐºÑменÑа Ñ Ð¾ÑмеÑеннÑми иÑкомÑми Ñловами. Ð Postgres Pro Ð´Ð»Ñ ÑеализаÑии ÑÑой возможноÑÑи пÑедÑÑавлена ÑÑнкÑÐ¸Ñ ts_headline.
ts_headline([конÑигÑÑаÑиÑregconfig,]докÑменÑtext,querytsquery[,паÑамеÑÑÑtext]) returnstext
ts_headline пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ð²Ð¼ÐµÑÑе Ñ Ð·Ð°Ð¿ÑоÑом и возвÑаÑÐ°ÐµÑ Ð²ÑдеÑÐ¶ÐºÑ Ð¸Ð· докÑменÑа, в коÑоÑой вÑделÑÑÑÑÑ Ñлова из запÑоÑа. ÐÑименÑемÑÑ Ð´Ð»Ñ ÑазбоÑа докÑменÑа конÑигÑÑаÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑказаÑÑ Ð² паÑамеÑÑе config; еÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑÑен, пÑименÑеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ default_text_search_config.
ÐÑли в паÑамеÑÑаÑ
пеÑедаÑÑÑÑ ÑÑÑока options, она должна ÑоÑÑоÑÑÑ Ð¸Ð· ÑпиÑка ÑазделÑннÑÑ
запÑÑÑми Ð¿Ð°Ñ Ð¿Ð°ÑамеÑÑ=знаÑение. ÐаÑамеÑÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ ÑледÑÑÑими:
MaxWords,MinWords(ÑелоÑиÑленнÑе): ÑÑи ÑиÑла опÑеделÑÑÑ Ð½Ð¸Ð¶Ð½Ð¸Ð¹ и веÑÑ Ð½Ð¸Ð¹ пÑедел ÑазмеÑа вÑдеÑжки. ÐнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ: 35 и 15, ÑооÑвеÑÑÑвенно.ShortWord(ÑелоÑиÑленнÑй): Ñлова Ñакой Ð´Ð»Ð¸Ð½Ñ Ð¸Ð»Ð¸ коÑоÑе в наÑале и конÑе вÑдеÑжки бÑдÑÑ Ð¾ÑбÑаÑÑваÑÑÑÑ, за иÑклÑÑением иÑкомÑÑ Ñлов. ÐнаÑение по ÑмолÑаниÑ, Ñавное 3, иÑклÑÑÐ°ÐµÑ ÑаÑпÑоÑÑÑанÑннÑе английÑкие аÑÑикли.HighlightAll(логиÑеÑкий): пÑи знаÑенииtrueвÑдеÑжкой бÑÐ´ÐµÑ Ð²ÐµÑÑ Ð´Ð¾ÐºÑменÑ, и ÑÑи пÑедÑдÑÑие паÑамеÑÑа игноÑиÑÑÑÑÑÑ. ÐнаÑение по ÑмолÑаниÑ:false.MaxFragments(ÑелоÑиÑленнÑй): макÑималÑное ÑиÑло вÑводимÑÑ ÑекÑÑовÑÑ ÑÑагменÑов. ÐнаÑение по ÑмолÑаниÑ, Ñавное нÑлÑ, вÑбиÑÐ°ÐµÑ Ñежим ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²ÑдеÑжек без ÑÑагменÑов. ÐÑи положиÑелÑном знаÑении вÑбиÑаеÑÑÑ Ñежим Ñ ÑÑагменÑами (Ñм. ниже).StartSel,StopSel: ÑÑÑоки, коÑоÑÑе бÑдÑÑ ÑазгÑаниÑиваÑÑ Ñлова запÑоÑа в докÑменÑе, вÑделÑÑ Ð¸Ñ ÑÑеди оÑÑалÑнÑÑ . ÐнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Â«<b>» и «</b>» Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑ Ð´Ð»Ñ Ð¾ÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑоÑмаÑе HTML.FragmentDelimiter(ÑÑÑока): в ÑлÑÑае, когда ÑÑагменÑов неÑколÑко, они бÑдÑÑ ÑазделÑÑÑÑÑ Ñказанной ÑÑÑокой. ÐнаÑение по ÑмолÑаниÑ: «...».
Ðмена ÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑов ÑаÑпознаÑÑÑÑ Ð±ÐµÐ· ÑÑÑÑа ÑегиÑÑÑа. ÐнаÑениÑ, ÑодеÑжаÑие пÑÐ¾Ð±ÐµÐ»Ñ Ð¸Ð»Ð¸ запÑÑÑе, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°ÐºÐ»ÑÑаÑÑÑÑ Ð² двойнÑе кавÑÑки.
Ð Ñежиме ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²ÑдеÑжек без ÑÑагменÑов ts_headline наÑ
Ð¾Ð´Ð¸Ñ Ð²Ñ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ñлов заданного запÑоÑа и возвÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ð¾ из вÑ
ождений, пÑедпоÑиÑÐ°Ñ Ñе, ÑÑо ÑодеÑÐ¶Ð°Ñ ÐºÐ°Ðº можно болÑÑе Ñлов из запÑоÑа в пÑеделаÑ
допÑÑÑимого ÑазмеÑа вÑдеÑжки. Ð Ñежиме Ñ ÑÑагменÑами ts_headline наÑ
Ð¾Ð´Ð¸Ñ Ð²Ñ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ñлов запÑоÑа и ÑазделÑÐµÑ ÑÑи вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½Ð° «ÑÑагменÑÑ», ÑоÑÑоÑÑие не более Ñем из MaxWords Ñлов, пÑедпоÑиÑÐ°Ñ Ñе, ÑÑо ÑодеÑÐ¶Ð°Ñ Ð±Ð¾Ð»ÑÑе иÑкомÑÑ
Ñлов, а заÑем Ð¼Ð¾Ð¶ÐµÑ Â«ÑаÑÑÑнÑÑÑ» ÑÑагменÑÑ, добавив в ниÑ
ÑоÑедние Ñлова. ÐÑоÑой Ñежим полезнее, когда Ñлова запÑоÑа наÑ
одÑÑÑÑ Ð½Ðµ ÑÑдом, а ÑазбÑоÑÐ°Ð½Ñ Ð¿Ð¾ докÑменÑÑ, или когда желаÑелÑно ÑвидеÑÑ ÑÑÐ°Ð·Ñ Ð½ÐµÑколÑко вÑ
ождений. Ð ÑлÑÑаÑÑ
, когда ÑооÑвеÑÑÑвие запÑоÑÑ Ð½Ð°Ð¹Ñи не ÑдаÑÑÑÑ, в обоиÑ
ÑежимаÑ
возвÑаÑаÑÑÑÑ Ð¿ÐµÑвÑе MinWords Ñлов из докÑменÑа.
ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑзованиÑ:
SELECT ts_headline('english',
'The most common type of search
is to find all documents containing given query terms
and return them in order of their similarity to the
query.',
to_tsquery('english', 'query & similarity'));
ts_headline
------------------------------------------------------------
containing given <b>query</b> terms +
and return them in order of their <b>similarity</b> to the+
<b>query</b>.
SELECT ts_headline('english',
'Search terms may occur
many times in a document,
requiring ranking of the search matches to decide which
occurrences to display in the result.',
to_tsquery('english', 'search & term'),
'MaxFragments=10, MaxWords=7, MinWords=3, StartSel=<<, StopSel=>>');
ts_headline
------------------------------------------------------------
<<Search>> <<terms>> may occur +
many times ... ranking of the <<search>> matches to decide
ФÑнкÑÐ¸Ñ ts_headline ÑабоÑÐ°ÐµÑ Ñ Ð¾ÑигиналÑнÑм докÑменÑом, а не его ÑжаÑÑм пÑедÑÑавлением tsvector, Ñак ÑÑо она Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð¹ и иÑполÑзоваÑÑ ÐµÑ ÑледÑÐµÑ Ð¾ÑмоÑÑиÑелÑно.