Úvod do FQL

Dopravu zadarmo chcem nastaviť na produkty, ktoré sú od značky XY a ich predajná cena je väčšia ako 1 000 Sk. Ako na to?

Filter Query Language (ďalej len FQL) je dopytovací jazyk, vďaka ktorému môžete vytvárať zložitejšie podmienky a tým vytvárať špecifické produktové výbery.
Vnútri FQL môžete vytvárať logické vzťahy, číselné i dátumové rozsahy, zoznamy či prehľadávať text.
Syntax je jednoduchá a vychádza z Apache Lucene.
Poďme si FQL predstaviť! :)

Základná syntax v FQL

Základným kameňom FQL dotazu je podmienka.

Podmínka se skládá ze dvou částí: pole:hodnota např.: znacka:adidas. Tento jednoduchý dotaz znamená to, že název značky musí být "adidas" (na velikosti písmen nezáleží).

Pokud chceme hledat víceslovný text, tak jej stačí uzavřít do uvozovek znacka:"adidas kids".

Porovnání může být samozřejmě proti číslu cena:99 (cena se rovná 99), datumu zprodejnen:"2020-05-24 14:30:59" (produkt byl zprodejněn 24. května 2020 v 14 hodin 30 minut a 59 vteřin) nebo pravdivostní hodnotě aktivni:false (produkt nesmí být aktivní).

Jednotlivé podmínky můžete slučovat do logických celků "a zároveň" znacka:"adidas" AND cena:99 (značka produktu je "Adidas" a prodejní cena je rovna 99 Kč) či "a nebo" znacka:"adidas" OR cena:99 (značka produktu je "Adidas" nebo prodejní cena je rovna 99 Kč).

Jednotlivé podmínky můžete negovat (obrátit význam) NOT znacka:"adidas" (značka nesmí být "Adidas"). Případně lze negovat celé logické celky NOT (znacka:"adidas" AND cena:99) (značka nesmí být "Adidas" a zároveň cena nesmí být 99 Kč).

Více podmínek nad stejným polem můžete sloučit do kratšího formátu. Např. tento FQL znacka:"*adidas*" OR znacka:"*nike*" je ekvivalentní s tímto FQL znacka:("*adidas*" OR "*nike*") (značka obsahuje "Adidas" nebo "Nike").

Textové hľadanie

Hľadanie či text obsahuje, začína, končí atď.

Značka se rovná hodnotě "Adidas Kids": znacka:"adidas kids"

Značka začíná na "Adi": znacka:"adi*"

Značka končí na "das": znacka:"*das"

Značka obsahuje "kid": znacka:"*kid*"

Každú podmienku môžeme negovať vďaka operátora NOT.

Značka se nerovná hodnotě "Adidas Kids": NOT znacka:"adidas kids"

Značka nezačíná na "Adi": NOT znacka:"adi*"

Značka nekončí na "das": NOT znacka:"*das"

Značka neobsahuje "kid": NOT znacka:"*kid*"

Numerické hľadanie

Hľadanie či je hodnota menšia, väčšia, rovná atď.

Cena se rovná 99: cena:99

Cena je menší než 99: cena:[* TO 99}

Cena je menší nebo rovno 99: cena:[* TO 99]

Cena je větší než 99: cena:{99 TO *]

Cena je větší nebo rovno 99: cena:[99 TO *]

Cena je větší než 29 a menší něž 99: cena:{29 TO 99}

Cena je větší než 29 a menší nebo rovna 99: cena:{29 TO 99]

Cena je větší nebo rovna 29 a menší nebo rovna 99: cena:[29 TO 99]

Každú podmienku môžeme negovať vďaka operátora NOT.

Dátumová hľadanie

Hľadanie či je dátum starší, novšie, rovný atď.

Zprodejněn dne 24. května 2020 14:30:59: zprodejnen:"2020-05-24 14:30:59"

Zprodejněn do 24. května 2020: zprodejnen:[* TO "2020-05-24 00:00:00"}

Zprodejněn do (včetně) 24. května 2020: zprodejnen:[* TO "2020-05-25 00:00:00"}

Zprodejněn od 24. května 2020: zprodejnen:{"2020-05-24 23:59:59" TO *]

Zprodejněn od (včetně) 24. května 2020: zprodejnen:["2020-05-24 00:00:00" TO *]

Zprodejněn od než 24. května 2020 do (včetně) 24. června 2020: zprodejnen:{"2020-05-24 23:59:59" TO "2020-06-25 00:00:00"}

Každú podmienku môžeme negovať vďaka operátora NOT.

Zoznamové hľadanie

Jednotlivé hodnoty vnútri zoznamu oddeľujeme cez středník ";".

ID je uvnitř výčtu ABC01, ABC02, ABC03: id:("ABC01;ABC02;ABC03")

Pokud některá z hodnot našeho výčtu obsahuje středník ";", pak je potřeba tento středník escapovat. Pokud náš seznam obsahuje hodnoty např. "01;ABC", "02ABC" a "03;ABC", pak bude náš seznam v FQL vypadat takto: id:("01\;ABC;02ABC;03\;ABC")

Každú podmienku môžeme negovať vďaka operátora NOT.

Regexp hľadanie

Hľadanie v hodnote podľa regulárneho výrazu. Vyhľadávanie je vykonávané s príznakom "insensitive" (nezáleží na veľkosti písmen).

Značka začíná na "Adidas": znacka:"~^adidas~"

Značka končí na "Kids": znacka:"~kids$~"

Značka obsahuje pouze písmena (ASCII): znacka:"~^[a-z]+$~"

Značka obsahuje pouze písmena (UTF-8): znacka:"~^\p{L}+$~"

Značka obsahuje pouze číslice: znacka:"~^[0-9]+$~"

Každú podmienku môžeme negovať vďaka operátora NOT.

Ak ste v dokumentácii nenašli to, čo ste hľadali, tak nás neváhajte kontaktovať (napr. cez chatovacie okno).
Radi Vám poradíme a dokumentáciu doplníme. :)