Here are some examples of what can be query with FlexibleSearch. Please feel to send me complex queries which could help others understand the syntax.
SELECT {e2s:target} FROM { contentslot AS s JOIN ElementsForSlot AS e2s ON {e2s:SOURCE} = {s:pk} } WHERE {s:uid} = 'priceChartEvolutionPage_main_slot'
SELECT * FROM { Player AS p JOIN Country AS c ON {c:pk} = {p:country} AND {c:isocode}='SYR' }
SELECT {v.code} voucherCode, {o.code} orderCode, {o.date} orderDate, {o.TotalDiscounts} orderTotalDiscounts,{d.value} discountValue FROM {VoucherInvalidation AS vi JOIN Voucher AS v ON {vi.voucher} = {v.pk} JOIN ORDER AS o ON {vi.order} = {o.pk} AND {o.plzForCalculation} IS NOT NULL AND {o.date} BETWEEN '2016-01-01' AND '2016-12-31 23:59:59' JOIN OrderDiscountRelation AS odr ON {odr.source} = {o.pk} JOIN Discount AS d ON {odr.target} = {d.pk} } WHERE {vi.status} = 'confirmed'
SELECT {p.pk } FROM {PointOfService AS p LEFT OUTER JOIN Address AS a ON {p.address} = {a.pk}} WHERE {p.modifiedtime} >= '2020-10-01' OR {a.modifiedtime} >= '2020-10-01' ORDER BY {p.baseStore}, {p.creationtime} DESC
SELECT {ware.pk} FROM {Warehouse AS ware} WHERE EXISTS ({{ SELECT 1 FROM {PLZRange AS plz} WHERE {ware:pk} = {plz:WAREHOUSE} }})
SELECT {code}, {catalogversion}, MIN(pk) FROM {CMSMedia} GROUP BY {code}, {catalogversion} HAVING COUNT(1) > 1
SELECT x.description, x.text FROM ({{ SELECT {r:description[en]} description, 'End result' text FROM {ScriptExecutionResult AS r} WHERE {r:canBeRunnedAgain} = 0 }} UNION ALL {{ SELECT {rr:description[en]}, 'Retry result' text FROM {ScriptExecutionResult AS rr} WHERE {rr:canBeRunnedAgain} = 1 }}) x
A select of the result of the union is mandatory.
SELECT {t:code}, {t:subject[en]}, {t:subject[de]} FROM {RendererTemplate AS t}
@Repository public class FlexibleSearchDeploymentEnvironmentDAO implements DeploymentEnvironmentDAO { (...) /** * {@inheritDoc } */ @Override public Set<DeploymentEnvironmentModel> loadEnvironments(final Set<String> environmentNames) { (...) final Set<String> normalizedEnvironmentNames = new HashSet<String>(); for (final String givenEnvironmentName : environmentNames) { normalizedEnvironmentNames.add(givenEnvironmentName.trim().toUpperCase(Locale.getDefault())); } final StringBuilder queryBuilder = new StringBuilder(); queryBuilder.append("SELECT {r.").append(ItemModel.PK).append("}").append(" FROM {") .append(DeploymentEnvironmentModel._TYPECODE).append(" as r ").append("} ").append(" WHERE ").append(" UPPER({") .append(DeploymentEnvironmentModel.NAME).append("}) ").append(" IN ").append('(').append('?') .append(DeploymentEnvironmentModel.NAME).append(')'); final FlexibleSearchQuery query = new FlexibleSearchQuery(queryBuilder.toString()); query.addQueryParameter(DeploymentEnvironmentModel.NAME, normalizedEnvironmentNames); final SearchResult<ScriptExecutionResultModel> searchResult = this.flexibleSearchService.search(query); if (environmentNames.size() != searchResult.getCount()) { throw new IllegalStateException("Some environments don't exist. Please check that these names are valid: " + environmentNames); } return new HashSet(searchResult.getResult()); } (...) }
Running a Flexible Search Query on HAC
How to see the raw SQL on the Flexible Search console on HAC
How to see what parameters where replaced on the query
– Based on Hybris 6.6