Faceting
Faceting, also known as faceted search, is a technique that allows users to filter and browse large datasets based on various attributes or categories. Faceted search aggregates terms and/or ranges and then applies filters based on them to narrow your search results.
Consider the following query for offers only with departureCity
Gdańsk
.
query {
search (
countryCode: PL,
languageCode: PL,
filters: {
departureCity: ["Gdańsk"]
}
pagination: {
offset: 0,
limit: 1
}
) {
offers {
id
name
}
facets {
countrySourceName {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Sample output from executing the graphql query above:
{
"data": {
"search": {
"offers": [
{
"id": "169",
"name": "ANDALUCIA SPA & LEISURE Villa"
}
],
"facets": {
"countrySourceName": [
{
"count": 612,
"countOffers": 6,
"value": "Polska",
"minPrice": 1000,
"maxPrice": 5500,
"avgPrice": 5225,
"medianPrice": 5500
},
{
"count": 308,
"countOffers": 1,
"value": "Malediwy",
"minPrice": 11642,
"maxPrice": 11642,
"avgPrice": 11642,
"medianPrice": 11642
},
{
"count": 266,
"countOffers": 2,
"value": "Egipt",
"minPrice": 2227,
"maxPrice": 3000,
"avgPrice": 2546,
"medianPrice": 2227
}
]
}
}
}
}
The output of the query returns unique vaules that occur in the field countrySourceName
:
count
- is the number of occurrences of a given value in the result set (in our case number of all trips)countOffers
- is the number of occurences of a given value for unique offers in the results setvalue
- is the instance of the valueminPrice
- is the minimal price for all prices in a given result setmaxPrice
- is the maximal price for all prices in a given result setavgPrice
- is the average price for all prices in a given result setmedianPrice
- is the median price for all prices in a given result set
By default, facet values are sorted by frequency.
Adults
The following example retrieves facet values, counts and price statistics for the adults
attribute.
query {
search(countryCode: PL, languageCode: PL) {
facets {
adults {
count
countOffers
value
maxPrice
minPrice
avgPrice
medianPrice
}
}
}
}
Departure dates
The following example shows how to retrieve facets on departureDate
field. You can obtain dates found in the search result using input dailyPrices
or get months of the departure date using input monthly
.
query {
search(
countryCode: PL,
languageCode: PL
filters: {
countrySourceName: ["Egipt"]
}
) {
facets {
departureDate {
min
max
dailyPrices {
minPrice
maxPrice
avgPrice
medianPrice
day
year
month
value
}
monthly {
minPrice
maxPrice
avgPrice
medianPrice
year
month
value
}
}
}
}
}
Sample output from executing the graphql query above:
{
"data": {
"search": {
"facets": {
"departureDate": {
"min": "2024-09-12",
"max": "2025-09-08",
"dailyPrices": [
{
"minPrice": 4500,
"maxPrice": 4500,
"avgPrice": 4500,
"medianPrice": 4500,
"day": 12,
"year": 2024,
"month": 9,
"value": "2024-09-12"
},
{
"minPrice": null,
"maxPrice": null,
"avgPrice": null,
"medianPrice": null,
"day": 13,
"year": 2024,
"month": 9,
"value": "2024-09-13"
}
],
"monthly": [
{
"minPrice": 2227,
"maxPrice": 5900,
"avgPrice": 2813,
"medianPrice": 2227,
"year": 2024,
"month": 9,
"value": "2024-09-11"
},
{
"minPrice": 2227,
"maxPrice": 4500,
"avgPrice": 2682,
"medianPrice": 2227,
"year": 2024,
"month": 10,
"value": "2024-10-01"
},
{
"minPrice": 2227,
"maxPrice": 4500,
"avgPrice": 2672,
"medianPrice": 2227,
"year": 2024,
"month": 11,
"value": "2024-11-01"
}
]
}
}
}
}
}
The output of the query returns unique vaules that occur in the field departureDate
:
min
- is the minimal departure date found in the given result setmax
- is the maximal departure date found in the given result setdailyPrices
- list of departure datesmonthly
- list of months for departure dates
For each dailyPrices
:
minPrice
- is the minimal price based on all offer prices with a given departure datemaxPrice
- is the maximal price based on all offer prices with a given departure dateavgPrice
- is the average price based on all offer prices with a given departure datemedianPrice
- is the median price based on all offer prices with a given departure datevalue
- is the vaule of departure dateday
- day of the departure datemonth
- the numeber of month of the departure dateyear
- the year of the departure date
For each monthly
:
minPrice
- is the minimal price based on all offer prices with a given month of departuremaxPrice
- is the maximal price based on all offer prices with a given month of departureavgPrice
- is the average price based on all offer prices with a given month of departuremedianPrice
- is the median price based on all offer prices with a given month of departurevalue
- is the value of month of departure date in formatYYYY-MM-01
month
- the numeber of month of the departure dateyear
- the year of the departure date
Destination
The following example retrieves hierarchical facets for destination categories: countrySourceName
, regionSourceName
, citySourceName
.
Hierarchical location
query {
search (
countryCode: PL,
languageCode: PL,
) {
facets {
countrySourceName {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
regionSourceName {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
citySourceName {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
}
Country
The following examples retrive facets for countrySourceName
or countrySourceId
field.
query {
search(countryCode: PL, languageCode: PL) {
facets {
countrySourceName {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
query {
search(countryCode: PL, languageCode: PL) {
facets {
countrySourceId {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Region
The following examples retrive facets for regionSourceName
or regionSourceId
field.
query {
search(countryCode: PL, languageCode: PL) {
facets {
regionSourceName {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
query {
search(countryCode: PL, languageCode: PL) {
facets {
regionSourceId {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
City
The following examples retrive facets for citySourceName
or citySourceId
field.
query {
search(countryCode: PL, languageCode: PL) {
facets {
citySourceName {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
query {
search(countryCode: PL, languageCode: PL) {
facets {
citySourceId {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Offer type
The following example retrieves facets for offerType
field.
query {
search(countryCode: PL, languageCode: PL) {
facets {
offerType {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Property category
The following examples retrieve facets for property category field.
Property category
query {
search(countryCode: PL, languageCode: PL) {
facets {
propertyCategory {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Property category range
The following example retrieve facets for offerType field.
query {
search(
countryCode: PL,
languageCode: PL
) {
facets {
propertyCategoryRange {
min
max
values {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
}
Transport type
The following example retrieves facets for transportType
field.
query {
search(countryCode: PL, languageCode: PL) {
facets {
transportType {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Departure city
The following example retrieves facets for departureCity
field.
query {
search(countryCode: PL, languageCode: PL) {
facets {
departureCity {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Period
The following example retrieves facets for period
field.
Period
query {
search(countryCode: PL, languageCode: PL) {
facets {
period {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Period Range
query {
search(countryCode: PL, languageCode: PL) {
facets {
periodRange {
max
min
values {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
}
Maintenances
The following examples retrive facets for maintenanceSourceName
, maintenanceName
, maintenanceSourceCode
or maintenanceCode
field.
query {
search(countryCode: PL, languageCode: PL) {
facets {
maintenanceSourceName {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
query {
search(countryCode: PL, languageCode: PL) {
facets {
maintenanceName {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
query {
search(countryCode: PL, languageCode: PL) {
facets {
maintenanceSourceCode {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
query {
search(countryCode: PL, languageCode: PL) {
facets {
maintenanceCode {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Rooms
The following examples retrive facets for roomSourceName
, roomName
, roomSourceCode
or roomCode
field.
query {
search(countryCode: PL, languageCode: PL) {
facets {
roomSourceName {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
query {
search(countryCode: PL, languageCode: PL) {
facets {
roomName {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
query {
search(countryCode: PL, languageCode: PL) {
facets {
roomSourceCode {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
query {
search(countryCode: PL, languageCode: PL) {
facets {
roomCode {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Price
The following example retrieves facet for prices in a given range 1 000 - 11 000
. It defines the gap between successive ranges.
query {
search(countryCode: PL, languageCode: PL) {
facets {
price {
max
min
ranges(config: { start: 1000, end: 11000, gap: 2000 }) {
max
min
}
}
}
}
}
Sample output from executing the graphql query above:
{
"data": {
"search": {
"facets": {
"price": {
"max": 35800,
"min": 1000,
"ranges": [
{
"max": null,
"min": null,
"count": 0
},
{
"max": 2999,
"min": 1000,
"count": 4374
},
{
"max": 4850,
"min": 3000,
"count": 6153
},
{
"max": 6964,
"min": 5000,
"count": 5130
},
{
"max": 8000,
"min": 7000,
"count": 229
},
{
"max": 10500,
"min": 9000,
"count": 491
},
{
"max": 35800,
"min": 11000,
"count": 3259
}
]
}
}
}
}
}
The output of the query returns:
min
- is the minimal price for all prices in a given result setmax
- is the maximal price for all prices in a given result setranges
- list of price ranges between values1000 - 11000
. Ranges are returned every2000
from 1000 to 11000.
For each range:
min
- is the lower bound of the rangemax
- is the upper bould of the range (the maximal price in the range)count
-is the number of occurences of prices within the given range
Semantic Category
Accommodation
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryAccommodation {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Activity
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryActivity {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Board Type
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryBoardType {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Cuisine
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryCuisine {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Hotel Amenities
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryHotelAmenities {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Hotel Attractions
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryHotelAttractions {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Hotel Type
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryHotelType {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Localization
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryLocalization {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Nature
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryNature {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Offer Type
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryOfferType {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Other
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryOther {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Room Amenities
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryRoomAmenities {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Room Type
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryRoomType {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Skiing
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategorySkiing {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Transportation
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryTransportation {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Trip Attractions
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryTripAttractions {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Trip Type
query {
search(countryCode: PL, languageCode: PL) {
facets {
semanticCategoryTripType {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Touroperator
Touroperator Code
query {
search(countryCode: PL, languageCode: PL) {
facets {
touroperatorCode {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
Touroperator Name
query {
search(countryCode: PL, languageCode: PL) {
facets {
touroperatorName {
count
countOffers
value
minPrice
maxPrice
avgPrice
medianPrice
}
}
}
}
You can explore the available facets options and other fields on our Demo Search Playground. Visit the Docs tab for detailed information on these options.