MATCH and TO_TEXT bring full-text search to data you never indexed. Search computed columns, unmapped fields and federated sources in ES|QL. ES|QL MATCH now runs full-text search on data you never indexed. Computed columns, unmapped fields, strings assembled on the fly, even federated data sitting in S3. The new TO_TEXT function tells ES|QL to treat any string as analyzable text, so MATCH can tokenize, case-fold and term-match values that exist only for the lifetime of a query. This goes beyond the LIKE and RLIKE pattern matching that most query engines offer for unindexed strings: it's real analysis.

Available now in Elastic Cloud Serverless and as a technical preview in Elasticsearch 9. Let's start with a query that was impossible in Elasticsearch 9. 4, which uses the EVAL command : In this example, summary has no mapping or analyzer configuration. It’s also not associated with any inverted index. It exists only for the lifetime of this query, but now you can search it anyway. Two additions make this work. First, MATCH now accepts any expression as its first argument, not just a mapped field. That includes columns produced by EVAL and function results used inline.

It also includes unmapped fields loaded directly from the original document. Furthermore, all data types normally accepted by MATCH are supported in this new use case. The second part of this is the new TO_TEXT function, which is the first ES|QL conversion function that produces output of type text . Until now, text columns could only come from indexed mapped fields, and all strings produced by ES|QL expressions were keyword values rather than text .

The distinction matters because MATCH treats the two differently: text values are analyzed, while keyword values are compared exactly, mirroring how a MATCH query on an indexed keyword field rewrites to a term query. TO_TEXT(x) is how you tell ES|QL: treat this string as full text . This ships as a technical preview in Elasticsearch 9. 5, and as such, it has some limitations: It’s currently filtering only. A MATCH on an expression doesn't contribute to the relevance score yet; only matches on indexed fields affect the score.