`SELECT ... WHERE match(key, '^prefix...')`
should use index similarly to
`SELECT ... WHERE key LIKE 'prefix%'`
/** Evaluation of expressions that depend only on constants.
      * For the index to be used, if it is written, for example `WHERE Date = toDate(now())`.
      */
    Block block_with_constants = getBlockWithConstants(query, syntax_analyzer_result, context);
    if (syntax_analyzer_result)
    {
        for (const auto & [name, _] : syntax_analyzer_result->array_join_result_to_source)
            array_joined_columns.insert(name);
    }
    const ASTSelectQuery & select = query->as<ASTSelectQuery &>();
    ASTs filters;
    if (select.where())
        filters.push_back(select.where());
    if (select.prewhere())
        filters.push_back(select.prewhere());
    for (const auto & filter_ast : additional_filter_asts)
        filters.push_back(filter_ast);
    if (!filters.empty())
    {
        ASTPtr filter_query;
        if (filters.size() == 1)
        {
            filter_query = filters.front();
        }
        else
        {
            auto function = std::make_shared<ASTFunction>();
            function->name = "and";
            function->arguments = std::make_shared<ASTExpressionList>();
            function->children.push_back(function->arguments);