Exact keyword matching
This example uses Elasticsearch’s term query to retrieve all elements whose name has the exact same content as the provided query, “Bluebell”, and are accessible to the user.
Results are then hydrated, i.e. transformed into a collection response.
Note: Instead of querying the Elasticsearch property name directly, we use name.keyword for a more efficient lookup. The .keyword suffix is part of Elasticsearch’s automatic schema generation process. Manually managed schemas might differ. See their documentation for details.
curl -X POST \ -H 'Authorization: Bearer secret-token:PIPeJGUt7c00ENn8a5uDlc' \ -H 'Content-Type: application/json' \ -d '{ "debug": true, "steps": [ { "type": "elasticsearch-query-dsl-mixin", "query": { "term": { "name.keyword": { "value": "Bluebell" } } } }, { "type": "element-hydration" } ] }' \ https://api.example.com/search[ { "input": { "type": "elasticsearch-query-dsl-mixin", "query": { "term": { "name.keyword": { "value": "Bluebell" } } }, "parameters": { "stepResults": [] } }, "step-handler": "elasticsearch-query-dsl-mixin (App\\EventSystem\\SearchStep\\EventListener\\ElasticsearchQueryDslMixinSearchStepEventListener)", "start": 1758825390.524884, "indices": "*", "combinedQuery": { "_source": [ "_id" ], "from": 0, "size": 25, "query": { "bool": { "must": [ { "term": { "name.keyword": { "value": "Bluebell" } } }, { "bool": { "should": [ { "terms": { "_groupsWithSearchAccess.keyword": [] } }, { "term": { "_usersWithSearchAccess.keyword": { "value": "7baba8b7-a6bb-4184-9a9a-925a4d2736b0" } } } ], "minimum_should_match": 1 } } ] } } }, "end": 1758825390.554652, "duration": 0.029768 }, { "input": { "type": "element-hydration", "query": null, "parameters": { "stepResults": [ { "elements": [ { "id": "83b35321-4a91-4e9f-a49b-66d718c32ba7", "type": "Plant", "metadata": { "score": 3.9060724 } } ], "totalHits": 1, "maxScore": 3.9060724 } ] } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", "start": 1758825390.554819, "accessibleElementIds": [ "83b35321-4a91-4e9f-a49b-66d718c32ba7" ], "end": 1758825390.569048, "duration": 0.014229 }]{ "type": "_SearchResultResponse", "results": [ { "type": "Plant", "id": "83b35321-4a91-4e9f-a49b-66d718c32ba7", "data": { "images": [ { "description": "Mertensia virginica Virginia Bluebell seen in Brooklyn Botanic Garden", "imageLinkFull": "https://upload.wikimedia.org/wikipedia/commons/3/31/Mertensia_virginica.bbg.jpg", "imageLinkThumbnail": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/31/Mertensia_virginica.bbg.jpg/960px-Mertensia_virginica.bbg.jpg", "link": "https://en.wikipedia.org/wiki/File:Mertensia_virginica.bbg.jpg" }, { "description": "Virginia Bluebells along the Rocky River in Berea, OH. Photo by Geoffrey A. Landis", "imageLinkFull": "https://upload.wikimedia.org/wikipedia/commons/6/6f/Virginia_Bluebells_at_Rocky_River.jpg", "imageLinkThumbnail": "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Virginia_Bluebells_at_Rocky_River.jpg/960px-Virginia_Bluebells_at_Rocky_River.jpg", "link": "https://en.wikipedia.org/wiki/File:Virginia_Bluebells_at_Rocky_River.jpg" } ], "created": "2025-09-25T18:35:28+00:00", "updated": "2025-09-25T18:35:28+00:00", "name": "Bluebell", "scenario": "general.botanicExample", "scientificName": "M. virginica", "link": "https://en.wikipedia.org/wiki/Mertensia_virginica", "description": "Mertensia virginica (common names Virginia bluebells,[1] Virginia cowslip,[2] lungwort oysterleaf, Roanoke bells) is a spring ephemeral plant in the Boraginaceae (borage) family with bell-shaped sky-blue flowers, native to eastern North America." } } ], "debug": [ { "input": { "type": "elasticsearch-query-dsl-mixin", "query": { "term": { "name.keyword": { "value": "Bluebell" } } }, "parameters": { "stepResults": [] } }, "step-handler": "elasticsearch-query-dsl-mixin (App\\EventSystem\\SearchStep\\EventListener\\ElasticsearchQueryDslMixinSearchStepEventListener)", "start": 1758825390.524884, "indices": "*", "combinedQuery": { "_source": [ "_id" ], "from": 0, "size": 25, "query": { "bool": { "must": [ { "term": { "name.keyword": { "value": "Bluebell" } } }, { "bool": { "should": [ { "terms": { "_groupsWithSearchAccess.keyword": [] } }, { "term": { "_usersWithSearchAccess.keyword": { "value": "7baba8b7-a6bb-4184-9a9a-925a4d2736b0" } } } ], "minimum_should_match": 1 } } ] } } }, "end": 1758825390.554652, "duration": 0.029768 }, { "input": { "type": "element-hydration", "query": null, "parameters": { "stepResults": [ { "elements": [ { "id": "83b35321-4a91-4e9f-a49b-66d718c32ba7", "type": "Plant", "metadata": { "score": 3.9060724 } } ], "totalHits": 1, "maxScore": 3.9060724 } ] } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", "start": 1758825390.554819, "accessibleElementIds": [ "83b35321-4a91-4e9f-a49b-66d718c32ba7" ], "end": 1758825390.569048, "duration": 0.014229 } ]}Access-Control-Allow-Headers: *Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCKAccess-Control-Allow-Origin: *Access-Control-Expose-Headers: ETag, LocationAllow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCKCache-Control: no-cache, privateContent-Type: application/json; charset=utf-8Date: Thu, 11 Sep 2025 20:23:41 GMTTransfer-Encoding: chunkedX-Powered-By: Ember Nexus APIAs only a single element has the name “Bluebell”, the search response is almost empty.