Introduction to FQL
I want to set up free shipping for products that are from the XY brand and their selling price is greater than CZK 1,000. How to do it?
Filter Query Language (next only FQL)is a query language that allows you to create more complex conditions and with that create specific product selections.
Within FQL, you can create logical relationships, numeric and date ranges, lists, or search text.
The syntax is simple and based onApache Lucene.
Let's introduce FQL! :)
Basic syntax in FQL
The cornerstone of an FQL query is a condition.
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").
Text search
Searching whether a text contains, begins, ends, etc.
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*"
We can deny every condition thanks to the operator 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*"
Numeric search
Searching to see if the value is smaller, larger, equal, etc.
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]
We can deny every condition thanks to the operator NOT.
Date search
Searching to see if the date is older, newer, equal, etc.
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"}
We can deny every condition thanks to the operator NOT.
Listsearch
Individual values inside the enumeration we separate via a semicolon ";".
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")
We can deny every condition thanks to the operator NOT.
Regexp hledání
Searching in value byregular expression. The search is performed with an index"insensitive" (font size does not matter.
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]+$~"
We can deny every condition thanks to the operator NOT.
If you did not find what you were looking for in the documentation, do not hesitate to contact us (eg via the chat window).
We will be glad to advise you and complete the documentation. :)