Tovek: Dotazovací jazyk verze 6.1 a vyšší Tovek Server, Tovek Tools
© Copyright TOVEK, spol. s r.o. | www.tovek.cz
Tovek Dotazovací jazyk
verze 6.1 a vyšší
Copyright Copyright © 1996 - 2011 TOVEK, spol. s r.o. Tento dokument a softwarový produkt, který popisuje, jsou chráněny autorskými právy a mezinárodními dohodami o duševním vlastnictví. Lze s nimi nakládat pouze v souladu s platnou licenční smlouvou. Informace obsažené v dokumentaci mohou podléhat změnám bez předchozího upozornění.
Popisovaný produkt obsahuje: Clucene Core Library Licencováno na základě Apache License, verze 2.0. Licence je k dispozici na http://www.apache.org/licenses/LICENSE-2.0. S produktem lze nakládat pouze v souladu s touto licencí.
Ochranné známky TOVEK, logo TOVEK a InfoRating jsou registrované ochranné známky společnosti TOVEK, spol. s r.o. Microsoft a Windows jsou registrované ochranné známky skupiny společností Microsoft. Další produkty a služby mohou být registrovanými ochrannými známkami nebo ochrannými známkami svých příslušných vlastníků a v dokumentaci jsou uváděny pouze pro referenci.
Upozornění a vzdání se odpovědnosti Pokud není písemně uzavřenou smlouvou stanoveno jinak, je tento softwarový produkt a související dokumentace poskytován „jak-je“, bez záruk jakéhokoli druhu, ať již výslovně vyjádřených nebo předpokládaných. TOVEK, spol. s r.o. http://www.tovek.cz
4
Obsah
Obsah Úvod do dotazovacího jazyka .........................................................................................................7 Základní pojmy a jejich vztah k dotazovacímu jazyku ...................................................................7 Přehled operátorů .........................................................................................................................8 Pojmové operátory ...................................................................................................................8 Konceptuální operátory ............................................................................................................9 Poziční operátory ...................................................................................................................10 Relační operátory ...................................................................................................................10 Pokročilé operátory ................................................................................................................11 Přehled modifikátorů ...................................................................................................................11 Syntaxe dotazovacího jazyka........................................................................................................13 Striktní zápis dotazů ....................................................................................................................13 Zjednodušený zápis dotazů.........................................................................................................14 Prefix notace operátorů ...............................................................................................................18 Infix notace operátorů .................................................................................................................18 Koeficient váhy operátorů............................................................................................................20 Pojmenované části dotazu ..........................................................................................................21 Operátory a modifikátory ..............................................................................................................23 Operátor all .................................................................................................................................23 Operátor and, and/w, and/l, and/s, and/c ....................................................................................23 Operátor any ...............................................................................................................................25 Operátor best ..............................................................................................................................25 Operátor contains ........................................................................................................................26 Operátor ends .............................................................................................................................27 Operátory field a filter ..................................................................................................................28 Operátor freetext .........................................................................................................................28 Operátor in ..................................................................................................................................29 Operátor like................................................................................................................................30 Operátor matches .......................................................................................................................30 Operátor near, near/w, near/c, near/m ........................................................................................31 Operátor or, or/w, or/l, or/s, or/c ..................................................................................................33 Operátor paragraph .....................................................................................................................34 Operátor phrase ..........................................................................................................................35 Operátor range ............................................................................................................................35 Operátor sentence ......................................................................................................................36 Operátor soundex .......................................................................................................................37 Operátor starts ............................................................................................................................38 Operátor stem .............................................................................................................................38 Operátor substring ......................................................................................................................40 Operátor thesaurus .....................................................................................................................40 Operátor topic .............................................................................................................................41 Operátor typo/n ...........................................................................................................................42 5
Obsah
Operátor wildcard ....................................................................................................................... 43 Operátor word............................................................................................................................. 44 Operátory !=, <, <=, =, >, >= ...................................................................................................... 45 Modifikátor case ......................................................................................................................... 47 Modifikátor many ........................................................................................................................ 47 Modifikátor order......................................................................................................................... 48 Modifikátor not ............................................................................................................................ 48 Modifikátor lang/id ...................................................................................................................... 48
6
Úvod do dotazovacího jazyka
Úvod do dotazovacího jazyka Tato příručka popisuje dotazovací jazyk, jeho jednotlivé stavební kameny a způsob jejich použití pro vyhledání dokumentů v produktech firmy Tovek. Tato kapitola uvádí stručný přehled všech operátorů dotazovacího jazyka, jejich členění a možnosti jejich zápisu. Detailní informace a příklady užití konkrétních operátorů jsou uvedeny v příslušných dalších kapitolách.
Základní pojmy a jejich vztah k dotazovacímu jazyku dotaz
Definuje podmínky, které musí být splněny pro všechny vyhledané dokumenty, a způsob jejich ohodnocení. Dotaz může obsahovat operátory, modifikátory a pojmy. Vyhodnocením dotazu jsou jednotlivým dokumentům přiřazeny váhy odpovídající jejich relevanci.
pojem
Konkrétní slovo nebo množina slov, které se hledají nebo které slouží jako parametry nadřízeného operátoru.
operátor
Operátory slouží k definici základních dotazů nebo spojují několik dotazů dohromady a definují podmínky jejich vyhodnocení.
modifikátor
Upravuje význam modifikované části dotazu.
váha
Váha je číselný údaj definující relevanci dokumentu k danému dotazu.
koeficient váhy
Koeficient váhy je číselný údaj u dotazu, kterým je násobena vypočítaná váha dokumentu. Platná hodnota je z intervalu (0-1>.
jazyk dotazu
Jazyk dotazu ovlivňuje způsob, kterým jsou zpracovávány pojmy dotazu. Není-li žádný jazyk u dotazu uveden, tak je použit výchozí jazyk dotazu definovaný v konfiguraci indexu.
pole dotazu
Pole dotazu určuje část dokumentu, pro kterou se dotaz vyhodnocuje. Není-li pole dotazu uvedeno, tak se použije výchozí pole dotazu z konfigurace indexu.
pojmenování dotazu
Pojmenování dotazu nebo jeho částí slouží k definování témat, případně ke zjednodušení zápisu dotazu.
7
Úvod do dotazovacího jazyka
infix notace
Zápis dotazu, při kterém se operátor nachází mezi jeho parametry.
prefix notace
Zápis dotazu, při kterém se operátor nachází před jeho parametry, které jsou uzavřené v závorkách.
zjednodušený zápis dotazu
Zápis dotazu, při kterém je možné vynechat pojmové operátory.
speciální znaky
Znaky, kterým musí předcházet zpětné lomítko, mají-li být součástí hledaného pojmu. Jedná se o znaky `'\"<>()[]{},=\, a v některých případech i o znaky *+?.
poddotaz
Dotaz, uvedený jako parametr operátoru.
Přehled operátorů Operátory lze rozdělit do dvou hlavních skupin podle toho, jakého typu jsou jejich argumenty. První skupina je tvořena operátory, jejichž argumenty jsou jednotlivé pojmy. Tyto operátory umožňují definovat skupiny pojmů, které se mají v dokumentech vyhledávat. Druhá skupina je tvořena operátory, které spojují dva a více dotazů dohromady a definují, v jakém vztahu se musí tyto dotazy ve vyhodnocovaných dokumentech vyskytovat. Podle významu lze operátory dále rozdělit na následující skupiny: -
Pojmové operátory
-
Konceptuální operátory
-
Poziční operátory
-
Relační operátory
-
Pokročilé operátory
Pojmové operátory Pojmové operátory jsou základní stavební kameny dotazů a definují, jaké pojmy se mají v dokumentech vyhledávat.
8
word
Slouží k vyhledání dokumentů, které obsahují jeden nebo více výskytů daného pojmu v zadaném tvaru.
stem
Umožňuje vyhledat dokumenty obsahující uvedený pojem v jakémkoli jeho mluvnickém tvaru.
Úvod do dotazovacího jazyka
wildcard
Najde dokumenty, které obsahují jeden nebo více pojmů, které odpovídají zadanému regulárnímu výrazu.
typo/n
Vyhledá dokumenty, které obsahují pojmy lišící se od zadaného pojmu maximálně o daný počet chyb.
thesaurus
Slouží k vyhledání dokumentů obsahujících jakýkoli mluvnický tvar zadaného pojmu nebo jeho příbuzných pojmů.
soundex
Umožňuje nalézt dokumenty obsahující jakýkoliv tvar pojmů znějících podobně jako zadaný pojem.
range
Vyhledá dokumenty obsahující pojmy v daném rozsahu.
Konceptuální operátory Konceptuální operátory spojují jednotlivé dotazy do větších celků: best
Slouží k nalezení dokumentů, které vyhovují alespoň jednomu dotazu uvedenému jako parametr operátoru. Tento operátor řadí vybrané dokumenty v závislosti na výskytu každého parametru v dokumentu a jeho skóre je tím vyšší, čím více poddotazům odpovídá.
and
Najde dokumenty, které vyhovují všem dotazům uvedeným jako parametr operátoru. Tento operátor podporuje několik různých způsobů vážení výsledků.
or
Najde dokumenty, které vyhovují alespoň jednomu dotazu uvedenému jako parametr operátoru. Tento operátor podporuje několik různých způsobů vážení výsledků.
all
Vyhodnocuje dokumenty stejně jako operátor and, ale nepočítá skóre, a je tudíž rychlejší.
any
Vyhodnocuje dokumenty stejně jako operátor or, ale nepočítá skóre, a je tudíž rychlejší.
9
Úvod do dotazovacího jazyka
Poziční operátory Poziční operátory vyhodnocují dokumenty nejen na základě samotného výskytu pojmů, ale i na jejich konkrétní pozici: near/n
Slouží k nalezení dokumentů, které vyhovují všem dotazům uvedeným jako parametr operátoru, jejichž výskyty se nacházejí do maximální uvedené vzdálenosti. Operátor near podporuje několik způsobů vážení dokumentů, přičemž standardně je skóre dokumentů tím vyšší, čím blíže u sebe se jednotlivé výskyty nacházejí.
paragraph
Tento operátor vyhodnocuje dokumenty stejně jako near/n, kde n je délka odstavce, která je standardně nastavená na hodnotu 64.
sentence
Tento operátor vyhodnocuje dokumenty jako near/n, kde n je délka věty, která je standardně nastavená na hodnotu 16.
phrase
Umožňuje nalézt dokumenty obsahující frázi složenou z výskytů jednotlivých dotazů uvedených jako parametr operátoru. Nejčastěji se používá k vyhledání dokumentů obsahujících frázi složenou z několika konkrétních pojmů, příp. jejich stemů.
in
Operátor in definuje v jaké části dokumentu, případně v jakém poli se má dotaz vyhodnocovat.
Relační operátory Relační operátory slouží k nastavování podmínek pro netokenizovaná pole dokumentu (tokenizace je vysvětlena v příručce Tovek: Fulltextové jádro, Příručka administrátora). Typicky se jedná o pole obsahující datum, číslo nebo řetězcovou konstantu:
10
contains
Umožňuje nalézt dokumenty, které v daném poli obsahují daný řetězec.
matches
Vyhledá dokumenty, které v daném poli obsahují hodnotu odpovídající uvedenému vzoru.
starts
Najde dokumenty, které v daném poli obsahují hodnotu začínající uvedeným řetězcem.
substring
Vyhledá dokumenty, které v daném poli obsahují hodnotu, jejíž součástí je uvedený řetězec
Úvod do dotazovacího jazyka
ends
Najde dokumenty, které v daném poli obsahují hodnotu končící uvedeným řetězcem.
<
Najde dokumenty s hodnotou v daném poli menší než uvedená hodnota.
<=
Najde dokumenty s hodnotou v daném poli menší nebo rovnou uvedené hodnotě.
=
Najde dokumenty s hodnotou v daném poli rovnou uvedené hodnotě.
!=
Najde dokumenty s hodnotou v daném poli různou od uvedené hodnoty.
>=
Najde dokumenty s hodnotou v daném poli větší nebo rovnou uvedené hodnotě.
>
Najde dokumenty s hodnotou v daném poli větší než uvedená hodnota.
Pokročilé operátory Dotazovací jazyk podporuje následující pokročilé operátory: topic
Umožňuje využít témata uložená u indexu, případně definovaná lokálně v rámci daného dotazu.
freetext
Pomocí operátoru freetext lze specifikovat dotaz volným textem.
like
Najde dokumenty podobné uvedenému dokumentu.
Přehled modifikátorů Modifikátory upravují nebo upřesňují význam operátorů. Dotazovací jazyk obsahuje následující modifikátory: case
Modifikátor case lze použít s některými pojmovými operátory a omezuje vyhledávání pouze na pojmy, které se shodují i ve velikosti 11
Úvod do dotazovacího jazyka
jednotlivých písmen.
12
many
Tento modifikátor nastavuje výpočet váhy dokumentu, který zohledňuje počet výskytů hledaných pojmů v daném dokumentu. Čím více výskytů dokument obsahuje, tím vyšší bude jemu přiřazená váha.
not
Obrací význam modifikovaného dotazu, a tudíž umožňuje nalézt všechny dokumenty, které mu nevyhovují.
order
Operátor order určuje, že se jednotlivé parametry operátoru musí v dokumentu vyskytovat ve stejném pořadí, ve kterém jsou uvedeny v dotazu.
lang/id
Definuje jazyk všech parametrů daného operátoru.
[číslo]
Koeficient váhy umožňuje ovlivnit výsledné skóre přiřazené dokumentu při vyhodnocování dotazu. Jednotlivé části dotazu mohou mít různé koeficienty váhy a tak různě přispívat k celkové váze dokumentu.
[jméno]
Pojmenování části dotazu, díky kterému se lze následně na danou část dotazu odkazovat pomocí operátoru topic.
[jméno/číslo]
V případě, že je třeba operátor nejen pojmenovat, ale i změnit jeho koeficient váhy, pak se oba tyto údaje zapíší do hranatých závorek oddělených lomítkem.
Syntaxe dotazovacího jazyka
Syntaxe dotazovacího jazyka Tato kapitola popisuje způsob zápisu dotazů pomocí dotazovacího jazyka. Dotazovací jazyk umožňuje využívat jak striktního, tak i zjednodušeného zápisu dotazů, přičemž oba tyto zápisy mohou být v rámci jednoho dotazu kombinovány. Totéž platí o prefix a infix notaci operátorů.
Striktní zápis dotazů Striktní zápis dotazů je způsob zápisu, při kterém jsou vždy uvedeny všechny použité modifikátory i operátory. Operátory jsou zapsané pomocí prefix notace. .many.stem( aféra ) <many><stem>( aféra ) Tento způsob zápisu je nejčastěji využíván při definování složitých expertních dotazů nebo uložených témat, protože umožňuje uvést explicitně všechny parametry hledání a díky prefix notaci operátorů je jednoznačně určené, které parametry patří kterým operátorům. Striktní zápis dotazů umožňuje dva různé zápisy modifikátorů a operátorů: <modifikátor> .modifikátor
( parametry oddělené čárkou ) .operátor( parametry oddělené čárkou ) Oba dva zápisy jsou ekvivalentní a je možné je kombinovat. Jména operátorů a modifikátorů jsou nezávislá na velikosti písmen a tudíž je možné jakýkoliv zápis včetně následujících: .operátor / .Operátor / .OPERÁTOR / Mezi jednotlivými modifikátory a operátory a dalšími prvky dotazu je možné psát mezery pro zvýšení čitelnosti, ale není to nutné: [ 50 ] . many . case . word ( aféra ) [ 50 ] < many > < case > < word > ( aféra ) [50].many.case.word(aféra) [50]<many><word>(aféra) 13
Syntaxe dotazovacího jazyka
Pojmy uvedené jako parametry jednotlivých operátorů mohou obsahovat libovolné znaky včetně mezer, ale nesmí obsahovat řetězce mající význam operátoru a speciální znaky. Při zápisu pojmů obsahujících speciální znaky je potřeba před těmito znaky uvést zpětné lomítko, případně dané pojmy uzavřít do dvojitých uvozovek, jednoduchých uvozovek nebo zpětných jednoduchých uvozovek. Speciální znaky, které je nutné uvést zpětným lomítkem, jsou následující: `'"<>()[]{},=\ Dotaz, který najde dokumenty obsahující např. pojem a'b(c, je nutné tedy zapsat tímto způsobem: .many.word( .many.word( .many.word( .many.word(
a\'b\(c ) "a'b(c" ) 'a\'b(c' ) `a'b(c` )
Parametry těchto operátorů jsou před vyhodnocením zpracovány stejným způsobem jako obsah pole, ve kterém se vyhodnocuje, a v případě, že se rozpadne na více částí, změní se příslušná část na frázi z těchto částí.
Zjednodušený zápis dotazů Zjednodušený zápis dotazů slouží především k uvádění jednoduchých krátkých dotazů. Tento zápis umožňuje vynechat nejčastější pojmové operátory a s nimi spojené modifikátory. Zjednodušený zápis dotazů je možné kombinovat s infix i prefix notací operátorů. Zkrácené zápisy lze použít při vyhledávání dokumentů v následujících situacích: Úkol č. 1
Vyhledání dokumentů obsahujících libovolný tvar pojmu aféra s vážením zahrnujícím četnost daného pojmu v dokumentu.
Striktní zápis
.many.stem( aféra )
Zjednodušený zápis
'aféra' `aféra` aféra
Uvedený pojem nesmí obsahovat mezery, jinak se daný dotaz bude chovat jako vyhledávání fráze. V prvních dvou verzích zjednodušeného zápisu nesmí hledaný pojem obsahovat uvozovací znak, případně musí být tomuto znaku předřazeno zpětné lomítko. V poslední uvedené a nejčastěji používané variantě dotazu nesmí uvedený pojem obsahovat ani mezery ani následující speciální znaky, aniž by byly uvedeny zpětným 14
Syntaxe dotazovacího jazyka
lomítkem: `'"<>()[]{},=\*+?
Úkol č. 2
Vyhledání dokumentů obsahujících konkrétní tvar pojmu aféra s vážením zahrnujícím četnost daného pojmu v dokumentu nezávisle na velikosti písmen.
Striktní zápis
.many.word( aféra )
Zjednodušený zápis
"aféra"
Uvedený pojem nesmí obsahovat mezery, jinak se daný dotaz bude chovat jako vyhledávání fráze. Navíc nesmí hledaný pojem obsahovat uvozovací znak, případně musí být tomuto znaku předřazeno zpětné lomítko.
Úkol č. 3
Vyhledání dokumentů obsahujících daný tvar pojmu Aféra s vážením zahrnujícím četnost daného pojmu v dokumentu a respektováním malých a velkých písmen.
Striktní zápis
.case.many.stem( Aféra )
Zjednodušený zápis
.case "Aféra" .case Aféra
Uvedený pojem nesmí obsahovat mezery, jinak se daný dotaz bude chovat jako vyhledávání fráze. V první verzi nesmí hledaný pojem obsahovat uvozovací znak, případně musí být tomuto znaku předřazeno zpětné lomítko. Ve druhé variantě pak nesmí uvedený pojem obsahovat ani mezery ani následující speciální znaky, aniž by byly uvedeny zpětným lomítkem: `'"<>()[]{},=\*+?
Úkol č. 4
Vyhledání dokumentů obsahujících pojmy vyhovující regulárnímu výrazu afér*
15
Syntaxe dotazovacího jazyka
Striktní zápis
.many.wildcard( afér* )
Zjednodušený zápis
afér*
Pro uvedený regulární výraz platí stejné podmínky jako v ostatních případech při hledání pojmu, který není v uvozovkách. Nesmí tudíž obsahovat mezery a všem speciálním znakům kromě ? a * musí předcházet zpětné lomítko. Právě výskyt alespoň jednoho znaku ? a * odlišuje hledání regulárního výrazu od hledání všech tvarů daného pojmu. Tyto znaky mají následující význam: ? – jeden libovolný znak * - žádný nebo libovolný počet znaků
Úkol č. 5
Vyhledání dokumentů obsahujících libovolný tvar fráze mezinárodní aféra s vážením zahrnujícím četnost daných pojmů.
Striktní zápis
.many.phrase( .many.stem( mezinárodní ), .many.stem( aféra ) )
Zjednodušený zápis
'mezinárodní' 'aféra' `mezinárodní` `aféra` 'mezinárodní aféra' `mezinárodní aféra` mezinárodní aféra
Pro jednotlivé pojmy uvedené ve zjednodušeném dotazu platí stejné podmínky jako v Úkolu č.1. V prvních čtyřech verzích zjednodušeného zápisu nesmí hledané pojmy obsahovat uvozovací znak, případně musí být tomuto znaku předřazeno zpětné lomítko. V poslední uvedené a nejčastěji používané variantě dotazu nesmí uvedený pojem obsahovat ani mezery ani následující speciální znaky, aniž by byly uvedeny zpětným lomítkem: `'"<>()[]{},=\*+?
16
Syntaxe dotazovacího jazyka
Úkol č. 6
Vyhledání dokumentů obsahujících konkrétní tvar fráze mezinárodními aférami s vážením zahrnujícím četnost daných pojmů.
Striktní zápis
.many.phrase( .many.word( mezinárodními ), .many.word( aférami ) )
Zjednodušený zápis
"mezinárodními aférami" "mezinárodními" "aférami"
Pro jednotlivé pojmy uvedené ve zjednodušeném dotazu platí stejné podmínky jako v Úkolu č. 2. Nesmí obsahovat mezery a uvozovacímu znaku musí předcházet zpětné lomítko.
Úkol č. 7
Vyhledání dokumentů obsahujících obecnou frázi mezinárod* aféra ABC s vážením zahrnujícím četnost daných pojmů.
Striktní zápis
.many.phrase( .many.wildcard( mezinárod* ), .many.stem( aféra ), .many.word( ABC ) )
Zjednodušený zápis
mezinárod* aféra "ABC"
Úkol č. 8
Vyhledání dokumentů vyhovujících uloženému tématu témaaféra.
Striktní zápis
.topic( téma-aféra )
mezinárod* 'aféra' "ABC"
17
Syntaxe dotazovacího jazyka
Zjednodušený zápis
{téma-aféra} {"téma-aféra"} {'téma-aféra'} {`téma-aféra`}
Jméno tématu může na rozdíl od pojmů obsahovat mezery. V takovém případě ale musí být celé jméno uzavřené do dvojitých uvozovek, jednoduchých uvozovek nebo zpětných jednoduchých uvozovek. Je-li součástí jména tématu speciální znak, musí před ním být uvedeno obrácené lomítko.
Prefix notace operátorů Prefix notace operátorů je způsob zápisu operátorů a jejich parametrů, při kterém je nejprve uveden příslušný operátor, a pak v závorce následují čárkou oddělené parametry. Počet parametrů, které je možné pro daný operátor uvést, závisí na konkrétním operátoru. Před každým operátorem mohou být uvedeny modifikátory upravující jeho význam, přičemž nezáleží na jejich pořadí: # Najde dokumenty, které neobsahují řetězec AFÉRA .not.many.case.word( AFÉRA ) .many.case.not.word( AFÉRA ) .case.many.not.word( AFÉRA ) # Najde dokumenty obsahující aféra stemované podle pravidel # českého jazyka .many.lang/cs.stem( aféra ) lang/cs.many.stem( aféra )
Infix notace operátorů Infix notace operátorů je dostupná pouze pro některé operátory. Každý z těchto operátorů má dva parametry a samotný operátor je uveden mezi nimi: mezinárodní .and aféra zelený .or modrý Tento způsob notace operátorů se často využívá společně se zjednodušeným zápisem dotazů pro pokládání krátkých dotazů: mezinárodní .and aféra protože je úspornější než striktní zápis: 18
Syntaxe dotazovacího jazyka
.and( .many.stem( mezinárodní ), .many.stem( aféra ))
Infix notace operátorů umožňuje navíc zkrátit zápis následujících operátorů: počítač .best notebook počítač, notebook obchod .and sklad obchod and sklad firma .and .not bankrot firma not bankrot start .or cíl start or cíl Při vyhodnocování dotazů s infix notací operátorů se zpracovávají jednotlivé části podle priority příslušného operátoru. Operátory, které mají stejnou prioritu, se zpracovávají zleva doprava. Následující tabulka uvádí priority jednotlivých operátorů, operátory s nejvyšší prioritou jsou vyhodnocovány jako první: Nejvyšší priorita 0
in
1
near, phrase, paragraph, sentence, all, any
2
and, not (zkrácená forma .and .not)
3
best
4
or
Pořadí vyhodnocení jednotlivých operátorů může být změněno uzavřením částí dotazu do závorek. Následující příklady uvádějí způsob použití infix notace, přičemž všechny dotazy uvedené v jednom společném poli vedou vždy ke stejnému výsledku: škoda or audi or ford škoda .or audi .or ford ( škoda or audi ) or ford škoda or ( audi or ford ) Všechny tyto dotazy vyhledají dokumenty, které obsahují alespoň jeden výskyt některého tvaru jednoho z uvedených pojmů. Protože je zde použit pouze jen jeden typ 19
Syntaxe dotazovacího jazyka
operátoru, nezmění závorky žádným způsobem význam dotazu a je možné je zcela vynechat. Operátor or je jako většina operátorů dotazovacího jazyka komutativní, a proto nezáleží ani na pořadí uvedených pojmů v dotazu. Častěji než operátor or se však používá operátor best. Tyto dva operátory se od sebe liší pouze ve způsobu vážení nalezených dokumentů. Operátor best zvýhodňuje dokumenty, které vyhovují více jeho poddotazům, zatímco operátor or zohledňuje pouze váhu nejlepšího poddotazu: škoda, audi, ford škoda .best audi .best ford Konkrétně to znamená, že dokument, který obsahuje jeden pojem „Škoda“ a jeden pojem „Audi“ dostane při použití operátoru best vyšší váhu, než dokument, který obsahuje pouze jeden pojem „Škoda“. Při použití operátoru or bude oběma dokumentům přiřazena stejná váha. Operátor best je jedním z nejčastěji používaných operátorů, a proto se jako jeho zkrácená podoba používá pouze čárka. škoda and bílá not diesel škoda .and bílá .and .not diesel škoda not diesel and bílá Tyto dotazy vyhledají všechny dokumenty, které obsahují pojem „Škoda“ a pojem „bílá“, ale neobsahují pojem „diesel“. Pozor, operátor not, který je uvedený v posledním příkladu, je zkrácený zápis pro operátor .and a modifikátor .not, který je aplikován na další poddotaz. Tento operátor není na rozdíl od ostatních komutativní, a proto nelze jeho parametry prohodit bez změny významu dotazu: bílá not diesel diesel not bílá
Koeficient váhy operátorů Při sestavování dotazu je možné jednotlivým jeho částem přiřadit různé koeficienty váhy podle jejich důležitosti. Tímto způsobem je možné zcela zásadně ovlivnit konečné řazení dokumentů v seznamu výsledků. Koeficienty váhy jsou vždy uváděny jako modifikátory konkrétních operátorů. Jejich hodnoty se mohou pohybovat v rozmezí od 0.01 do 1.00 a definují faktor, kterým je vynásobena váha dokumentu po vyhodnocení daného operátoru. Hodnota koeficientu váhy může být zapsána následujícími způsoby: 1. 20
Desetinné číslo z intervalu (0,1.00> definující konkrétní hodnotu koeficientu
Syntaxe dotazovacího jazyka
2.
Celé číslo z intervalu <1,100> definující procentuální hodnotu koeficientu.
V následujícím příkladu jsou uvedené skupiny shodných dotazů lišících se pouze v jejich zápisu: [50]mezinárodní .and [80]aféra [.5]mezinárodní .and [.8]aféra [0.5]mezinárodní .and [0.8]aféra .and( [50].many.stem( mezinárodní ), [80].many.stem( aféra )) .and( [.5].many.stem( mezinárodní ), [.8].many.stem( aféra )) .and( [0.5].many.stem( mezinárodní ), [0.8].many.stem( aféra )) [90]škoda, [50]audi, [30]ford [.9]škoda, [.5]audi, [.3]ford [0.9]škoda, [0.5]audi, [0.3]ford .best( [90]škoda, [50]audi, [30]ford ) .best( [.9]škoda, [.5]audi, [.3]ford ) .best( [0.9]škoda, [0.5]audi, [0.3]ford )
Pojmenované části dotazu Pojmenovávání částí dotazu slouží ke zjednodušení zápisu dlouhých dotazů, ve kterých se některé jeho části opakují, a k definování uložených témat, na která je možné se v dalších dotazech odkazovat. K odkázání se na předdefinované téma nebo na pojmenovanou část aktuálního dotazu slouží operátor topic, který má jako parametr jméno daného tématu nebo části dotazu, nebo jeho zjednodušenou formou, uzavřením jména do složených závorek. Pojmenování částí dotazu jsou vždy uváděna jako modifikátory konkrétních operátorů, které tvoří kořen pojmenovaného dotazu. V případě, že je jméno jednoslovné, pak je možné zapsat ho bez uvozovek přímo do hranatých závorek, přičemž je nutné vložit zpětné lomítko před každý speciální znak a normální lomítko: `'"<>()[]{},=\/ Jméno části dotazu může být uvedeno ve dvojitých uvozovkách, jednoduchých uvozovkách nebo zpětných jednoduchých uvozovkách. V tomto případě je nutné uvést zpětné lomítko pouze před použitými uvozovkami. Následující příklad pojmenování dotazu uvádí dvě skupiny zcela shodných dotazů, které se liší pouze formou zápisu: [auto].best( škoda, audi ) ["auto"].best( škoda, audi ) ['auto'].best( škoda, audi ) [`auto`].best( škoda, audi ) [číslo\<5].or( jedna, dvě, tři, čtyři ) 21
Syntaxe dotazovacího jazyka
["číslo<5"].or( jedna, dvě, tři, čtyři ) ['číslo<5'].or( jedna, dvě, tři, čtyři ) [`číslo<5`].or( jedna, dvě, tři, čtyři ) V následujícím příkladu je pojmenována část dotazu a vzápětí znovu využita, což vede ke zkrácení zápisu dotazu: .best( .and( .and( .and( .and( )
22
cena, [auto].best( škoda, audi, ford )), spotřeba, {auto} ), výbava, {auto} ), testy, {auto} )
Operátory a modifikátory
Operátory a modifikátory Operátor all Popis
Vybere dokumenty, které vyhovují všem dotazům uvedeným jako parametry operátoru. Na rozdíl od operátoru and přiřadí tento operátor všem vyhovujícím dokumentům váhu 1.00. Díky tomu je jeho vyhodnocení ve fulltextovém jádru rychlejší.
Striktní zápis
.all ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN )
Infix notace
dotaz1 .all dotaz2 dotaz1 dotaz2
Modifikátory
many – Změní vážení operátoru. Operátor přiřadí dokumentům nejmenší váhu vrácenou jeho poddotazy. order – Je-li tento modifikátor uveden, pak je výsledek hledání navíc závislý na pořadí jednotlivých poddotazů. Pro všechny nalezené dokumenty platí, že výskyty poddotazů operátoru se v nich objevují ve stejném pořadí, jako jsou v zadání dotazu.
Příklady: .all( modrá, červená, zelená, žlutá ) modrá .all červená .all zelená .all žlutá .order.all( první, druhý, třetí )
Operátor and, and/w, and/l, and/s, and/c Popis
Vybere dokumenty, které vyhovují všem dotazům uvedeným jako parametry operátoru. Operátor and podporuje několik různých typů vážení dokumentů. Standardně přiřazuje tento operátor dokumentům nejmenší váhu vrácenou jeho poddotazy. Varianta and/c přiřadí všem dokumentům konstantní váhu 1.00, 23
Operátory a modifikátory
stejně jako operátor all. Varianta and/w vypočítá výslednou váhu na základě skóre všech poddotazů. Výpočet je založen na stejném algoritmu jako operátor best. Varianta and/s zakládá výpočet váhy dokumentu na součtu výskytů jednotlivých poddotazů. Varianta and/l využívá algoritmu CLucene pro odvození váhy dokumentů. Striktní zápis
.and ( dotaz1, …, dotazN ) .and/w ( dotaz1, …, dotazN ) .and/l ( dotaz1, …, dotazN ) .and/s ( dotaz1, …, dotazN ) .and/c ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN )
Infix notace
dotaz1 and dotaz2 dotaz1 .and dotaz2 dotaz1 dotaz2
Modifikátory Příklady: .and( mezinárodní, aféra ) mezinárodní and aféra .and/w( vlastník, firma )
24
Operátory a modifikátory
Operátor any Popis
Vybere dokumenty, které vyhovují alespoň jednomu z dotazů uvedených jako parametry operátoru. Na rozdíl od operátoru or tento operátor přiřadí všem vyhovujícím dokumentům váhu 1.00. Díky tomu je jeho vyhodnocení ve fulltextovém jádru výrazně rychlejší.
Striktní zápis
.any ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN )
Infix notace
dotaz1 .any dotaz2 dotaz1 dotaz2
Modifikátory
many – Změní vážení operátoru tak, že přiřadí dokumentům nejvyšší váhu vrácenou jeho poddotazy.
Příklady: .any( modrá, červená, zelená, žlutá ) modrá .any červená .any zelená .any žlutá .many.any( první, druhý, třetí )
Operátor best Popis
Vybere dokumenty, které vyhovují alespoň jednomu z dotazů uvedených jako parametry operátoru. Jednotlivým dokumentům přiřadí skóre v závislosti na počtu poddotazů, kterým daný dokument vyhovuje, a na jejich skóre. Nejvyšší váhu tak dostanou dokumenty, které vyhovují největšímu počtu poddotazů s co možná nejvyšší váhou.
Striktní zápis
.best ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN )
Infix notace
dotaz1 .best dotaz2 dotaz1 dotaz2
25
Operátory a modifikátory
Zjednodušený zápis
dotaz1, dotaz2
Modifikátory
-
Příklady: .best( modrá, červená, zelená, žlutá ) modrá, červená, zelená, žlutá
Operátor contains Popis
Operátor contains vybere dokumenty, které v daném poli obsahují uvedenou hodnotu, která může být zadaná bez ohledu na velikost písmen. Vyhodnocení operátoru se liší v závislosti na tom, zda je pole tokenizované (tokenizace je vysvětlena v příručce Tovek: Fulltextové jádro, Příručka administrátora). Pro tokenizovaná pole se operátor contains vyhodnotí stejně jako operátor word. Pro netokenizovaná pole vybere operátor contains dokumenty, pro které má dané pole uvedenou hodnotu. V tomto případě musí být zadaná celá hodnota pole, která, v případě že obsahuje mezery, musí být uzavřena do dvojitých uvozovek, jednoduchých uvozovek nebo zpětných jednoduchých uvozovek. Jméno pole nezávislé na velikosti písmen.
Striktní zápis
jméno_pole .contains hodnota jméno_pole hodnota
Infix notace
-
Modifikátory
case – Modifikátor case způsobí, že při vyhodnocování bude brána na zřetel velikost písmen uvedených v hodnotě. To, zda se opravdu najde pouze přesná podoba hodnot, závisí na konfiguraci pole, ve kterém se hledá, neboť každé pole nemusí obsahovat v indexu informace o velikosti písmen ve svých hodnotách.
Příklady:
26
Operátory a modifikátory
oblast .contains "Regionální deníky - Olomoucký a Zlínský kraj" .case titulek .contains Radnice
Operátor ends Popis
Operátor ends vybere dokumenty, které v daném poli obsahují hodnotu, která končí zadaným řetězcem bez ohledu na velikost písmen. Vyhodnocení operátoru se liší v závislosti na tom, zda je pole tokenizované (tokenizace je vysvětlena v příručce Tovek: Fulltextové jádro, Příručka administrátora). Tento operátor nelze použít pro tokenizovaná pole. Pro netokenizovaná pole vybere operátor ends dokumenty, pro které má dané pole hodnotu končící uvedeným řetězcem. V tomto případě se bere v potaz celá hodnota, a tak zadaný řetězec může obsahovat i mezery. V takovém případě ale musí být uzavřen do dvojitých uvozovek, jednoduchých uvozovek nebo zpětných jednoduchých uvozovek. Jméno pole je nezávislé na velikosti písmen.
Striktní zápis
jméno_pole .ends hodnota jméno_pole <ends> hodnota
Infix notace
-
Modifikátory
case – Modifikátor case způsobí, že při vyhodnocování bude brána na zřetel velikost písmen v uvedeném řetězci. To, zda se opravdu bude uvažovat pouze přesná podoba řetězce, závisí na konfiguraci pole, ve kterém se hledá, neboť každé pole nemusí obsahovat v indexu informace o velikosti písmen ve svých hodnotách.
Příklady: titulek .ends nice .case oblast .ends "Zlínský kraj"
27
Operátory a modifikátory
Operátory field a filter Popis
Tyto operátory jsou používány spolu s relačními operátory především při tvorbě témat.
Striktní zápis
.field ( jméno_pole relační_operátor hodnota ) ( jméno_pole relační_operátor hodnota ) .filter ( jméno_pole relační_operátor hodnota ) ( jméno_pole relační_operátor hodnota )
Infix notace
-
Modifikátory
-
Příklady: .field( titulek .contains prezident ) .filter( datum > today-1 )
Operátor freetext Popis
Vyhledá dokumenty na základě uvedeného volného textu a přiřadí jim váhu podle jejich podobnosti vzhledem k tomuto textu. Volný text je třeba zadat ve dvojitých uvozovkách, jednoduchých uvozovkách nebo zpětných jednoduchých uvozovkách a může obsahovat libovolné znaky, pouze před použitými uvozovkami musí být uvedeno zpětné lomítko. Operátor freetext vyextrahuje z textu dotazu nějčastěji se vyskytující slova a složí z nich strukturovaný dotaz, který vyhledá dokumenty obsahující co možná nejvíce těchto slov v co nejmenší vzdálenosti od sebe.
Striktní zápis
.freetext ( "Volný text." ) .freetext ( 'Volný text.' ) .freetext ( `Volný text.` ) ( "Volný text." ) ( 'Volný text.' )
28
Operátory a modifikátory
( `Volný text.` ) Infix notace
-
Modifikátory
-
Příklady: .freetext( 'Na Starou radnici láká stálá expozice Obrazy Jana Pinkavy, malíře starých Hranic.' ) .freetext( "\"Ahoj\", zavolal." )
Operátor in Popis
Tento operátor slouží k definici pole případně zóny dokumentu, na kterou bude aplikován příslušný dotaz. Není-li operátorem in určeno jinak, vyhodnocuje se každý dotaz proti standardnímu poli obsahujícímu text dokumentu. Toto pole je uvedeno v konfiguraci indexu. Operátorem in lze toto pole pro celý nebo část dotazu změnit. Navíc je možné pomocí operátoru in specifikovat více než jedno pole, ve kterém se má hledat. V případě, že je takovýchto polí uvedeno více, budou nalezeny dokumenty, které vyhovují dotazu alespoň v jednom poli.
Striktní zápis
dotaz .in jméno_pole dotaz .in (jméno_pole1, …, jméno_poleN) dotaz jméno_pole dotaz (jméno_pole1, …, jméno_poleN)
Infix notace
-
Modifikátory
-
Příklady: .and( pilot, voják ) .in titulek 29
Operátory a modifikátory
.and( pilot, voják ) .in (titulek, doc)
Operátor like Popis
Tento operátor slouží k vyhledání dokumentů podobných uvedenému dokumentu. Klíč dokumentu, pokud neobsahuje mezery, může být uveden bez uvozovek s tím, že každému speciálnímu znaku předchází zpětné lomítko. V opačném případě je nutné zadat klíč v dvojitých uvozovkách, jednoduchých uvozovkách nebo zpětných jednoduchých uvozovkách. Aktuální verze nepodporuje tento operátor.
Striktní zápis
.like( klíč_dokumentu ) ( klíč_dokumentu )
Infix notace
-
Modifikátory
-
Příklady: .like( 'doc2215890146' )
Operátor matches Popis
Operátor matches vybere dokumenty, které v daném poli obsahují hodnotu, která odpovídá uvedené hodnotě. Tato hodnota může být zadána bez ohledu na velikost písmen. Vyhodnocení operátoru se liší v závislosti na tom, zda je pole tokenizované (tokenizace je vysvětlena v příručce Tovek: Fulltextové jádro, Příručka administrátora). Tento operátor nelze použít pro tokenizovaná pole. Pro netokenizovaná pole vybere operátor matches dokumenty, pro které má dané pole hodnotu odpovídající zadané hodnotě. V tomto případě musí být zadaná celá hodnota pole, která, v případě že obsahuje mezery, musí být uzavřena do dvojitých uvozovek, jednoduchých uvozovek nebo zpětných jednoduchých uvozovek.
30
Operátory a modifikátory
Uvedená hodnota může obsahovat zástupné znaky: ? – jeden libovolný znak * - žádný nebo libovolný počet znaků. Při standardní konfiguraci indexu nemohou být zástupné znaky uvedeny na prvním místě. Jméno pole je nezávislé na velikosti písmen. Striktní zápis
jméno_pole .matches hodnota jméno_pole <matches> hodnota
Infix notace
-
Modifikátory
case – Modifikátor case způsobí, že při vyhodnocování bude brána na zřetel velikost písmen uvedených v hodnotě. To, zda se opravdu najde pouze přesná podoba hodnot, závisí na konfiguraci pole, ve kterém se hledá, neboť každé pole nemusí obsahovat v indexu informace o velikosti písmen ve svých hodnotách.
Příklady: oblast .matches televi* .case titulek .matches Člověk*
Operátor near, near/w, near/c, near/m Popis
Tento operátor vybere dokumenty, které vyhovují všem jeho poddotazům a jejichž výskyty se nacházejí do určité maximální vzdálenosti od sebe. U každé z variant tohoto operátoru je možné zadat maximální vzdálenost, která se má brát v potaz. Tato vzdálenost se udává celým číslem a znamená počet slov. V případě, že není žádná maximální vzdálenost uvedena, použije se nastavení daného indexu, přičemž standardní hodnota je 1024. Operátor near podporuje několik různých typů vážení dokumentů. Není-li žádný typ vážení uvedený, pak je chování operátoru řízeno konfigurací a standardně váží jako jeho varianta near/m. Varianta near/m odvozuje výpočet váhy dokumentu od nejmenší vzdálenosti výskytů všech jeho poddotazů, přičemž čím menší je 31
Operátory a modifikátory
tato vzdálenost, tím vyšší je přiřazená váha. Varianta near/c přiřadí všem dokumentům konstantní váhu 1.00. Tato varianta je, co se týká vyhodnocování, nejefektivnější. Varianta near/w vypočítá výslednou váhu na základě všech vzdáleností výskytů všech poddotazů. Tímto způsobem je výsledná váha ovlivněna i celkovým počtem výskytů poddotazů v dokumentu. Striktní zápis
.near ( dotaz1, …, dotazN ) .near/m ( dotaz1, …, dotazN ) .near/c ( dotaz1, …, dotazN ) .near/w ( dotaz1, …, dotazN ) .near/číslo ( dotaz1, …, dotazN ) .near/mčíslo ( dotaz1, …, dotazN ) .near/cčíslo ( dotaz1, …, dotazN ) .near/wčíslo ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN )
infix notace
dotaz1 .near dotaz2 dotaz1 .near/[mcw][číslo] dotaz2 dotaz1 dotaz2 dotaz1 dotaz2
Modifikátory
Příklady:
32
order – Tento modifikátor způsobí, že se budou brát v úvahu pouze výskyty v dokumentu, které odpovídají pořadí poddotazů.
Operátory a modifikátory
.near( firma, krach ) firma .near krach .order.near/w5( státní, organizace ) státní .order.near/w5 organizace
Operátor or, or/w, or/l, or/s, or/c Popis
Vybere dokumenty, které vyhovují alespoň jednomu dotazu uvedenému jako parametr operátoru. Operátor or podporuje několik různých typů vážení dokumentů. Standardně přiřazuje tento operátor dokumentům nejvyšší váhu vrácenou jeho poddotazy. Varianta or/c přiřadí všem dokumentům konstantní váhu 1.00, stejně jako operátor any, a je co do zpracování výrazně rychlejší než ostatní varianty tohoto operátoru. Varianta or/w vypočítá výslednou váhu na základě skóre všech poddotazů. Výpočet je založen na stejném algoritmu jako operátor best. Varianta or/s zakládá výpočet váhy dokumentu na součtu výskytů jednotlivých poddotazů. Varianta or/l využívá algoritmu CLucene pro odvození váhy dokumentů.
Striktní zápis
.or ( dotaz1, …, dotazN ) .or/w ( dotaz1, …, dotazN ) .or/l ( dotaz1, …, dotazN ) .or/s ( dotaz1, …, dotazN ) .or/c ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN )
33
Operátory a modifikátory
Infix notace
dotaz1 or dotaz2 dotaz1 .or dotaz2 dotaz1 dotaz2
Modifikátory
-
Příklady: .or( modrá, oranžová ) modrá or oranžová .or/w( spořitelna, banka )
Operátor paragraph Popis
Tento operátor vybere dokumenty, které vyhovují všem jeho poddotazům a jejichž výskyty se nacházejí do konfigurací definované vzdálenosti od sebe. Standardně je tato vzdálenost 64 slov. Operátor paragraph je tedy ve standardním případě shodný s operátorem near/64.
Striktní zápis
.paragraph ( dotaz1, …, dotazN ) <paragraph> ( dotaz1, …, dotazN )
Infix notace
dotaz1 .paragraph dotaz2 dotaz1 <paragraph> dotaz2
Modifikátory
order – Tento modifikátor způsobí, že se budou brát v úvahu pouze výskyty v dokumentu, které odpovídají pořadí poddotazů.
Příklady: .paragraph( firma, krach ) firma .paragraph krach
34
Operátory a modifikátory
Operátor phrase Popis
Operátor phrase najde všechny dokumenty obsahující danou frázi. Jednotlivá slova hledané fráze jsou specifikována poddotazy operátoru a je možné definovat více než jedno slovo pro konkrétní pozici, např. pomocí operátoru wildcard, přímým výčtem pomocí operátoru or, určením rozsahu pomocí range a další.
Striktní zápis
.phrase ( dotaz1, …, dotazN ) ( dotaz1, …, dotazN )
Infix zápis
dotaz1 .phrase dotaz2 dotaz1 dotaz2
Zjednodušený zápis
Zjednodušený zápis lze využít, jsou-li všechny poddotazy pouze typu stem, word nebo wildcard. V tomto případě stačí napsat jejich zkrácené podoby za sebou. Poddotazy se stejným typem lze zahrnout pod jedny společné uvozovací znaky: "škola" "hrou" je stejné jako "škola hrou" 'vlastník' 'firma' je stejné jako 'vlastník firma'
Modifikátory
many – Tento modifikátor způsobí, že nalezeným dokumentům bude přiřazena váha na základě počtu výskytů fráze.
Příklady: .phrase( školní, osnova ) školní .phrase osnova školní osnova .phrase( "škola", "hrou" ) "škola" "hrou" "škola hrou" .phrase( nový, vlastník, .or( vozidlo, firma))
Operátor range Popis
Operátor range najde všechny dokumenty obsahující hodnotu 35
Operátory a modifikátory
z uvedeného rozsahu včetně hraničních hodnot v aktuálním poli. Porovnávání hodnot pole závisí na typu pole a je shodné s operátory <= a >=. Striktní zápis
.range( hodnota_od, hodnota_do ) ( hodnota_od, hodnota_do )
Infix zápis
-
Modifikátory
case - Modifikátor case způsobí, že při vyhodnocování bude brána na zřetel velikost písmen v uvedeném pojmu. Toto se týká pouze dotazů vztahujících se k textovým polím.
Příklady: .range( today-1, today ) .range( a, azzzzzzz )
Operátor sentence Popis
Tento operátor vybere dokumenty, které vyhovují všem jeho poddotazům a jejichž výskyty se nacházejí do konfigurací definované vzdálenosti od sebe. Standardně je tato vzdálenost 16 slov. Operátor sentence je tedy ve standardním případě shodný s operátorem near/16.
Striktní zápis
.sentence ( dotaz1, …, dotazN ) <sentence> ( dotaz1, …, dotazN )
Infix notace
dotaz1 .sentence dotaz2 dotaz1 <sentence> dotaz2
Modifikátory
Příklady:
36
order – Tento modifikátor způsobí, že se budou brát v úvahu pouze výskyty v dokumentu, které odpovídají pořadí poddotazů.
Operátory a modifikátory
.sentence( vlastník, firma ) vlastník .sentence firma
Operátor soundex Popis
Operátor soundex umožňuje vyhledat dokumenty obsahující podobně znějící pojmy jako uvedený pojem v jakémkoli jejich mluvnickém tvaru. Určení vyhledaných tvarů závisí na aktuálním nastaveném jazyce dotazu, přičemž v případě, že daný jazyk nepodporuje tuto funkcionalitu, budou se hledat pouze mluvnické tvary zadaného pojmu. Není-li v dotazu určeno jinak, používá se jazyk indexu, ve kterém se dotaz vyhodnocuje. V případě, že se daný dotaz vyhodnocuje proti více indexům najednou, pak se podobně znějící pojmy a jejich mluvnické tvary určí pro každý index zvlášť. Dotazovací jazyk umožňuje přiřadit konkrétní jazyk určité části dotazu pomocí modifikátoru lang/id. Nastavení jazyka pomocí tohoto modifikátoru má přednost oproti nastavení indexu. Pojem uvedený jako parametr operátoru nesmí obsahovat mezery, a jestliže není uzavřený ve dvojitých uvozovkách, jednoduchých uvozovkách nebo zpětných jednoduchých uvozovkách, musí všem speciálním znakům předcházet zpětné lomítko: `'"<>()[]{},=\/ Tento operátor přiřadí každému nalezenému dokumentu váhu 1.00.
Striktní zápis
.soundex( hodnota ) <soundex>( hodnota )
Infix notace
-
Modifikátory
many – Tento modifikátor způsobí, že nalezeným dokumentům bude přiřazena váha na základě počtu výskytů hledaných pojmů v daném dokumentu.
Příklady: .many.soundex( podíl ) .soundex( firma )
37
Operátory a modifikátory
Operátor starts Popis
Operátor starts vybere dokumenty, které v daném poli obsahují hodnotu, která začíná zadaným řetězcem bez ohledu na velikost písmen. Vyhodnocení operátoru se liší v závislosti na tom, zda je pole tokenizované (tokenizace je vysvětlena v příručce Tovek: Fulltextové jádro, Příručka administrátora). Tento operátor nelze použít pro tokenizovaná pole. Pro netokenizovaná pole vybere operátor starts dokumenty, pro které má dané pole hodnotu začínající uvedeným řetězcem. V tomto případě se bere v potaz celá hodnota, a tak zadaný řetězec může obsahovat i mezery. V takovém případě ale musí být uzavřen do dvojitých uvozovek, jednoduchých uvozovek nebo zpětných jednoduchých uvozovek. Jméno pole nezávislé na velikosti písmen.
Striktní zápis
jméno_pole .starts hodnota jméno_pole <starts> hodnota
Infix notace
-
Modifikátory
case – Modifikátor case způsobí, že při vyhodnocování bude brána na zřetel velikost písmen v uvedeném řetězci. To, zda se opravdu bude uvažovat pouze přesná podoba řetězce, závisí na konfiguraci pole, ve kterém se hledá, neboť každé pole nemusí obsahovat v indexu informace o velikosti písmen ve svých hodnotách.
Příklady: oblast .starts "Regionální deníky" .case titulek .starts Ors
Operátor stem Popis
38
Operátor stem umožňuje vyhledat dokumenty obsahující uvedený pojem v jakémkoli jeho mluvnickém tvaru. Určení vyhledaných tvarů závisí na aktuálním nastaveném jazyce dotazu. Není-li v dotazu určeno jinak, používá se jazyk indexu, ve kterém se dotaz vyhodnocuje. V případě, že se daný dotaz vyhodnocuje proti více
Operátory a modifikátory
indexům najednou, pak se mluvnické tvary pojmu určí pro každý index zvlášť. Dotazovací jazyk umožňuje zadat konkrétní jazyk pro určitou část dotazu pomocí modifikátoru lang/id. Nastavení jazyka pomocí tohoto modifikátoru má přednost oproti nastavení indexu. Pojem uvedený jako parametr operátoru nesmí obsahovat mezery, a jestliže není uzavřený ve dvojitých uvozovkách, jednoduchých uvozovkách nebo zpětných jednoduchých uvozovkách, pak musí všem speciálním znakům předcházet zpětné lomítko: `'"<>()[]{},=\/ Tento operátor přiřadí každému nalezenému dokumentu váhu 1.00. Striktní zápis
.stem( hodnota ) <stem>( hodnota )
Infix notace
-
Zjednodušený zápis
Zjednodušený zápis tohoto operátoru automaticky uplatňuje modifikátor many a váží dokumenty podle počtu výskytů daného pojmu. V případě první varianty nesmí daná hodnota navíc obsahovat znaky * a ?, které jsou indikátorem zjednodušeného zápisu pro operátor wildcard: hodnota `hodnota` 'hodnota'
Modifikátory
many – Tento modifikátor způsobí, že nalezeným dokumentům bude přiřazena váha na základě počtu výskytů uvedeného pojmu a jeho mluvnických tvarů.
Příklady: .many.stem( vlastník ) vlastník .stem( firma )
39
Operátory a modifikátory
Operátor substring Popis
Operátor substring vybere dokumenty, které v daném poli obsahují hodnotu, která obsahuje zadaný řetězec bez ohledu na velikost písmen. Vyhodnocení operátoru se liší v závislosti na tom, zda je pole tokenizované (tokenizace je vysvětlena v příručce Tovek: Fulltextové jádro, Příručka administrátora). Tento operátor nelze použít pro tokenizovaná pole. Pro netokenizovaná pole vybere operátor substring dokumenty, pro které má dané pole hodnotu obsahující uvedený řetězec. V tomto případě se bere v potaz celá hodnota, a tak zadaný řetězec může obsahovat i mezery. V takovém případě ale musí být uzavřen do dvojitých uvozovek, jednoduchých uvozovek nebo zpětných jednoduchých uvozovek. Jméno pole nezávislé na velikosti písmen.
Striktní zápis
jméno_pole .substring hodnota jméno_pole <substring> hodnota
Infix notace
-
Modifikátory
case – Modifikátor case způsobí, že při vyhodnocování bude brána na zřetel velikost písmen v uvedeném řetězci. To, zda se opravdu bude uvažovat pouze přesná podoba řetězce, závisí na konfiguraci pole, ve kterém se hledá, neboť každé pole nemusí obsahovat v indexu informace o velikosti písmen ve svých hodnotách.
Příklady: oblast .substring "Olomoucký a Zlínský" .case titulek .substring hotov
Operátor thesaurus Popis
40
Operátor thesaurus umožňuje vyhledat dokumenty obsahující daný pojem nebo jeho příbuzné pojmy v jakémkoli jejich mluvnickém tvaru. Určení vyhledaných tvarů závisí na aktuálním nastaveném jazyce dotazu, přičemž v případě, že pro daný jazyk nejsou k dispozici příslušné slovníky, budou se hledat pouze mluvnické
Operátory a modifikátory
tvary zadaného pojmu. Není-li v dotazu určeno jinak, používá se jazyk indexu, ve kterém se dotaz vyhodnocuje. V případě, že se daný dotaz vyhodnocuje proti více indexům najednou, pak se příbuzné pojmy a jejich mluvnické tvary určí pro každý index zvlášť. Dotazovací jazyk umožňuje zadat konkrétní jazyk pro určitou část dotazu pomocí modifikátoru lang/id. Nastavení jazyka pomocí tohoto modifikátoru má přednost oproti nastavení indexu. Pojem uvedený jako parametr operátoru nesmí obsahovat mezery, a jestliže není uzavřený ve dvojitých uvozovkách, jednoduchých uvozovkách nebo zpětných jednoduchých uvozovkách, pak musí všem speciálním znakům předcházet zpětné lomítko: `'"<>()[]{},=\/ Tento operátor přiřadí každému nalezenému dokumentu váhu 1.00. Striktní zápis
.thesaurus( hodnota ) ( hodnota )
Infix notace
-
Modifikátory
many – Tento modifikátor způsobí, že nalezeným dokumentům bude přiřazena váha na základě počtu výskytů hledaných pojmů v daném dokumentu.
Příklady: .many.thesaurus( ředitel ) .thesaurus( "podíl" )
Operátor topic Popis
Tento operátor vyhledá dokumenty na základě uloženého tématu nebo lokálně pojmenované části dotazu. Parametr operátoru uvádí jméno tématu, které se má na místě operátoru vyhodnotit. V případě, že jméno tématu neobsahuje mezery, může být uvedeno bez dvojitých uvozovek, jednoduchých uvozovek nebo zpětných jednoduchých uvozovek, ale každému speciálnímu znaku musí předcházet zpětné lomítko. `'"<>()[]{},=\/ 41
Operátory a modifikátory
Témata, jejichž jména obsahují mezeru, musí být uvedena ve dvojitých uvozovkách, jednoduchých uvozovkách nebo zpětných jednoduchých uvozovkách. Lokálně pojmenované části mají v případě konfliktu jmen s uloženými tématy přednost. Jméno uloženého tématu lze napsat ve dvou podobách. Zkrácená verze obsahuje pouze jméno tématu, plná verze se skládá ze jména sady, do kterého téma patří, a vlastního jména tématu: sada:jméno_tématu Tímto způsobem lze odlišit od sebe témata z různých sad se stejným jménem. V rámci jedné sady témat musí mít každé téma jednoznačné pojmenování. Striktní zápis
.topic( jméno_tématu ) ( jméno_tématu )
Infix notace
-
Zjednodušený zápis
{ jméno_tématu }
Modifikátory
-
Příklady: .topic ( korupce ) { korupce }
Operátor typo/n Popis
Operátor typo umožňuje vyhledat dokumenty obsahující pojmy, které se liší od zadaného pojmu maximálně o zadaný počet chyb. Chybou se zde rozumí změna týkající se jedno písmena, tj. záměna písmena za jiné, vynechání písmena anebo vložení jiného písmena. Standardně se nebere v potaz velikost písmen. Operátor typo lze použít i bez uvedení akceptovaného rozdílu, pak se jeho vyhodnoceni řídí konfigurací indexu, kde je standardně nastaven rozdíl 2 překlepů. Pojem uvedený jako parametr operátoru nesmí obsahovat mezery, a
42
Operátory a modifikátory
jestliže není uzavřený ve dvojitých uvozovkách, jednoduchých uvozovkách nebo zpětných jednoduchých uvozovkách, pak musí všem speciálním znakům předcházet zpětné lomítko: `'"<>()[]{},=\/ Tento operátor přiřadí každému nalezenému dokumentu váhu 1.00. Striktní zápis
.typo( hodnota ) .typo/číslo( hodnota ) ( hodnota ) ( hodnota )
Infix notace
-
Modifikátory
many – Tento modifikátor způsobí, že nalezeným dokumentům bude přiřazena váha na základě počtu výskytů hledaných pojmů v daném dokumentu. case - Modifikátor case způsobí, že při vyhodnocování bude brána na zřetel velikost písmen v uvedeném řetězci.
Příklady: .many.typo( ředidel ) .typo/2( "fimra" )
Operátor wildcard Popis
Operátor wildcard umožňuje vyhledat dokumenty obsahující pojmy, které vyhovují zadanému regulárnímu výrazu. Pojem uvedený jako parametr operátoru nesmí obsahovat mezery, a jestliže není uzavřený ve dvojitých uvozovkách, jednoduchých uvozovkách nebo zpětných jednoduchých uvozovkách, musí všem speciálním znakům předcházet zpětné lomítko: `'"<>()[]{},=\/ Dotazovací jazyk podporuje v regulárních výrazech následující dva zástupné znaky, které se při standardní konfiguraci fulltextového jádra nesmí vyskytovat na první pozici: ? – jeden libovolný znak 43
Operátory a modifikátory
* - žádný nebo libovolný počet znaků. Tento operátor přiřadí každému nalezenému dokumentu váhu 1.00. Striktní zápis
.wildcard( regulární_výraz ) <wildcard>( regulární_výraz )
Infix notace
-
Zjednodušený zápis
Uvedený regulární výraz musí obsahovat alespoň jeden znak * nebo ?. V opačném případě bude dotaz považován za zjednodušený zápis operátoru stem. Zjednodušený zápis automaticky přidává k uvedenému dotazu modifikátor many. regulární_výraz
Modifikátory
many – Tento modifikátor způsobí, že nalezeným dokumentům bude přiřazena váha na základě počtu výskytů hledaných pojmů v daném dokumentu. case - Modifikátor case způsobí, že při vyhodnocování bude brána na zřetel velikost písmen v uvedeném řetězci.
Příklady: .many.wildcard( automo* ) automo* .case.wildcard ( "stro?" )
Operátor word Popis
Operátor word vyhledá dokumenty obsahující daný pojem pouze v uvedené podobě s tím, že standardně nejsou rozlišována velká a malá písmena. Pojem uvedený jako parametr operátoru nesmí obsahovat mezery, a jestliže není uzavřený ve dvojitých uvozovkách, jednoduchých uvozovkách nebo zpětných jednoduchých uvozovkách, pak musí všem speciálním znakům předcházet zpětné lomítko: `'"<>()[]{},=\/ Tento operátor přiřadí každému nalezenému dokumentu váhu 1.00.
44
Operátory a modifikátory
Striktní zápis
.word( přesný_výraz ) <word>( přesný_výraz )
Infix notace
-
Zjednodušený zápis
Zjednodušený zápis automaticky přidává modifikátor many k uvedenému dotazu. "přesný_výraz"
Modifikátory
many – Tento modifikátor způsobí, že nalezeným dokumentům bude přiřazena váha na základě počtu výskytů hledaného pojmu v daném dokumentu. Case - Modifikátor case způsobí, že při vyhodnocování bude brána na zřetel velikost písmen v uvedeném pojmu.
Příklady: .many.word( autem ) "autem" .many.case.word( Stát )
Operátory !=, <, <=, =, >, >= Popis
Tyto operátory slouží k vyhledání dokumentů, které v uvedeném poli obsahují hodnotu vyhovující dané relaci. Chování těchto operátorů se liší podle typu pole, ve kterém se hledá. Tyto operátor nelze použít pro tokenizovaná pole. Pro netokenizovaná pole, která obsahují textové hodnoty, vyberou tyto operátory dokumenty, pro které má dané pole hodnotu vyhovující uvedené relaci. V tomto případě se bere v potaz celá hodnota pole, a tak zadaný parametr může obsahovat i mezery. V takovém případě ale musí být uzavřen do dvojitých uvozovek, jednoduchých uvozovek nebo zpětných jednoduchých uvozovek. Pro pole obsahující datum se zadaný parametr nejprve převede do interního formátu, na jehož základě jsou dokumenty vyhledány. Datum může být uvedeno v jednom z následujících formátů (podtržítko = mezera ./,- ): 45
Operátory a modifikátory
YYYYMMDD MON_DD_YYYY YYYY_MM_DD DD_MM_YYYY (YYYY = rok, MM = měsíc, DD = den, MON = anglické jméno měsíce nebo jeho třípísmenná zkratka) Hodnotu data lze navíc definovat relativně k aktuálnímu dni tím, že se uvede v následující podobě: today today-počet_dní "today - počet_dní" Pro pole obsahující časové značky, tj. data s upřesněním času s rozlišením na sekundy, se tyto operátory chovají stejně, jako pro pole obsahující pouze datum. Akceptované jsou hodnoty skládající se z data následované časovým údajem v následujícím formátu: HHMMSS HH:MM:SS (HH = hodina, MM = minuta, SS = sekunda) Zadání data bez uvedení času znamená v tomto případě interval zahrnující celý den. today today-počet_dní "today - počet_dní" now now-počet_dní "now - počet_dní" now-počet_hodinh "now - počet_hodin h" Vyhrazená slovo today a now je možné konfiguračně na straně fulltextového jádra doplnit o další varianty. Slovo today označuje aktuální den, now aktuální den a čas. Také pro číselná pole se zadaná hodnota nejprve převede do interního formátu tak, aby se vyhodnotila číselně a ne řetězcově. 46
Operátory a modifikátory
Jméno pole je nezávislé na velikosti písmen. Tento operátor přiřadí každému nalezenému dokumentu váhu 1.00. jméno_pole != hodnota jméno_pole < hodnota jméno_pole <= hodnota jméno_pole = hodnota jméno_pole >= hodnota jméno_pole > hodnota Infix notace
-
Modifikátory
case - Modifikátor case způsobí, že při vyhodnocování bude brána na zřetel velikost písmen v uvedeném pojmu. Toto se týká pouze dotazů vztahujících se k textovým polím.
Příklady: datum = today cas > "now – 1h" cas > now–1h zdroj != noviny
Modifikátor case Tento modifikátor je platný před většinou pojmových operátorů a způsobí, že se bere v potaz velikost písmen zadaných v parametru dotazu. .case.word( Stát )
Modifikátor many Tento modifikátor mění způsob vážení dokumentů u operátorů, které standardně přiřazují pouze váhu 1.00, když daný dokument vyhovuje. Uvedením tohoto modifikátoru se při vážení bere v potaz počet výskytů hledaných pojmů v dokumentu; čím více se jich v dokumentu nachází, tím vyšší je jeho váha. 47
Operátory a modifikátory
.many.stem( auto )
Modifikátor order Modifikátor order nachází uplatnění především u pozičních operátorů. Díky jemu získá pořadí poddotazů význam a daný operátor vyhledává pouze dokumenty, ve kterých se poddotazy vyskytují v uvedeném pořadí. .order.near/1( pan, prezident )
Modifikátor not Tento modifikátor neguje význam dotazu, na který je aplikován. Negovaný dotaz vrátí všechny dokumenty, které původnímu dotazu nevyhovují. Tyto dokumenty mají skóre 1.00. Při použití negovaných dotazů se nepodsvěcují hledané pojmy. Tento modifikátor je aplikovatelný na každý operátor. .not.and( firma, krach )
Modifikátor lang/id Modifikátor lang/id určuje, podle jakých jazykových pravidel se budou zpracovávat pojmové operátory v dotaze, na který byl aplikován. Id představuje dvoupísmennou zkratku jazyka. Tento modifikátor je aplikovatelný na každý operátor. .lang/cs.and( meeting, feedback )
48